使用“exec”运行命令的脚本直到按下“Enter”键才会结束

使用“exec”运行命令的脚本直到按下“Enter”键才会结束

我们有一个 KSH 脚本,它运行一个进程exec并挂起。
我们希望能够自动运行它并使其在后台运行。

我们尝试了这个:

./myScript.ksh &

然而这让我们只能在“半空中”等待,并且仍然需要按下按键Enter才能继续。

我们发现的唯一解决方案是将实际脚本更改为如下所示:

....
exec <some command> &
exit 0

如果没有这两者&,它就exit 0无法工作。

还有更好的解决办法吗?

答案1

我很难接受你的第一个例子,你在后台启动工作,然后你说它让你处于“半空中”,你必须按 [Enter] 才能继续。

请注意,后台脚本产生的任何输出都将被打印shell 提示符 - 给人一种提示符缺失的错觉(实际上 shell 提示符已经存在,但向上滚动了)。您不必按 [Enter] 来输入下一个命令!

第二个例子(exec ... &)完全没有意义:&符号指示 shell 将命令作为并行后台进程启动,而 指示execshell 启动根本不会创建新进程,而是执行新命令“回收”当前进程。从技术上讲(非常简单):shell 程序的代码将被调用程序的代码替换。

结论:

  • 您不必按 [Enter](但这样做也无妨)

  • 由于 shell 脚本无论如何都是作为并行任务启动的,因此可以省略 & 符号。

  • exec如果要启动的命令是脚本最后执行的命令,那么使用是绝对有意义的,因此牺牲 Shell 可以节省一个原本无用的进程。

[添加:] 我想到了一个原因,为什么你可能认为你必须按 [Enter]:

当 shell 进程显示命令提示符(等待您的下一个命令)时,根本不会有任何关于已完成的后台进程的通知。

只有当 shell 显示下一个命令提示符时,您才会收到通知。这也可能导致“必须按 [Enter] 才能允许后台进程终止”的错觉。

相关内容