我正在尝试编写一个 shell 脚本来检查是否创建了 vncserver。这个想法是执行“vncviewer MACHINE_NAME”并根据文本输出我可以决定是否创建了服务器(我基本上寻找“无法”)
linuxMachineList="grd-ies-rh6-03"
for machine in $linuxMachineList
do
echo "Pinging $machine..."
echo -n '' > /tmp/${machine}_vnc_status.txt
eval vncviewer $machine:149 &> /tmp/${machine}_vnc_status.txt&
proc_id=$!
kill -9 $proc_id
grep -i unable /tmp/${machine}_vnc_status.txt > /dev/null
if [ $? == 0 ]
then
echo "Error: $machine does not respond"
else
echo "$machine is OK!"
fi
done
问题是因为 vncviewer 调用了一个弹出窗口,我需要自动终止 vncviewer 进程,因为我有一个很大的机器列表并且无法与每个弹出窗口进行交互。所以解决方案是使用 $! 将进程 ID 保存在“proc_id”中。但是我读到了$!仅对在后台调用的进程有效。问题来了,当我在后台调用 vncviewer 并将 stderr&stdout 重定向到文件时,它似乎确实在文件完成/关闭但没有被杀死时确实写入了文件。所以现在无论如何我都有一个空的文本文件,因为我总是在 vncviewer 写入我用来做出决定的输出文件之前通过杀死它来中断它的操作。
有什么帮助吗?