为什么在 .sh 文件中调用可执行文件后无法运行脚本命令?

为什么在 .sh 文件中调用可执行文件后无法运行脚本命令?

我尝试用谷歌搜索这个问题,但似乎找不到答案。在我的 .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 &

相关内容