我尝试用谷歌搜索这个问题,但似乎找不到答案。在我的 .sh 文件中,我调用了一个可执行文件(运行正常),但它似乎阻止了脚本的其余部分。我知道您可以从终端以后台方式运行脚本,但我不知道如何异步运行可执行文件。有人能给我指出正确的方向吗,因为我是 shell 脚本的新手?提前感谢您的任何意见。
if [ -d "/usr/lib/kega-fusion" ];
then
echo "Directory /usr/lib/kega-fusion exists " ;
if [ -d "/usr/lib/kega-fusion/logs"];
then
>> /usr/lib/kega-fusion/logs/log.sh && echo `logging successful discovery of directory at $date`
cd /usr/lib/kega-fusion/ && ./Fusion
else
echo "making logs directory"
echo 'supass' | sudo -kS mkdir -p /usr/lib/kega-fusion/logs
echo "Creating log.sh"
echo 'supass' | sudo -kS touch /usr/lib/kega-fusion/logs/log.sh
echo "Updating permissions"
echo 'supass' | sudo -kS chmod 755 /usr/lib/kega-fusion/;
echo 'supass' | sudo -kS chmod 755 /usr/lib/kega-fusion/logs/;
echo 'supass' | sudo -kS chmod 722 /usr/lib/kega-fusion/logs/log.sh;
echo "Appending new log date"
echo 'supass' | sudo -kS >> /usr/lib/kega-fusion/logs/log.sh && echo `logging successful discovery of directory at $date`
cd /usr/lib/kega-fusion/ && ./Fusion && echo "why doesnt this line run?"
WID = `xdotool search "Fusion 3.63x"`
echo $WID
fi
fi
答案1
您在行尾以“&”符号执行的任何命令或进程都将被发送到后台,从而允许您的脚本继续执行下一步,而您在其后附加“&”的进程将继续在后台执行其自己的操作。
例如,在 shell 脚本中执行时,这会导致带有睡眠定时器的行出现在其正下方的行之后。由于行尾有“&”,因此它会自行发送以继续运行,而脚本会继续沿该行执行其他操作。运行最后一行 5 秒后,第二行上的“echo”命令会弹出。
echo "This is a test" sleep 5 && echo "This is a test of the sleep functionality" & echo "This should appear before the sleep test"
所以无论如何,在脚本继续执行其自身任务时,在您想要在后台运行的任何内容上添加“&”。您甚至可能希望将这些命令的输出重定向到某个自定义文本/日志文件,以便其输出不会淹没您正在交互的终端,但您仍然有办法检查问题。即
somecommand > somelogfile.txt &