如何执行我的脚本但在后台运行,以便我可以继续使用相同的 shell

如何执行我的脚本但在后台运行,以便我可以继续使用相同的 shell

我有一个最终可以运行的脚本,可以自动执行所有计算,但需要一段时间。脚本的开头需要用户输入数据,然后运行直到完成。

如何在用户输入后保持脚本运行,然后在同一个 shell 中继续执行其他操作

答案1

在 shell 脚本中的命令后面添加一个与号 (&) 以在后台运行该脚本,即:

#!/bin/bash
echo "type something"
read text
command $text &

上面是我的意思的一个基本例子。

如果您已经启动了脚本,Ctrl+Z将暂停它,然后bg使其在后台恢复。

如果您运行的任何命令都会将数据输出到standout,即使在后台运行,它也会将其打印到控制台。您需要通过管道传输标准输出,以免它这样做。键入fg会将后台进程带到前台。

答案2

最简单的方法是在输入数据完成后按Ctrl+ Z(暂停脚本),然后bg将脚本发送到后台并继续运行。然后您就可以正常使用当前的 shell 会话。

然而,更好的方法是修改脚本,使其不需要任何用户输入。只需在启动脚本时将所需的任何输入作为参数传递即可。这将使您和用户的生活变得更加轻松。

例如,代替这个:

#!/bin/bash
echo "Give me the first number! "
read num1

echo "Give me the second number! "
read num2

用这个:

#!/bin/bash
num1=$1
num2=$2

并像这样运行脚本(其中1030是示例数字,分别保存为num1num2):

script.sh 10 30 > out 2>err&

这样,脚本将立即发送到后台,任何输出都将重定向到名为 的文件out,任何错误消息都将重定向到名为 的文件err。所有参数均已在启动时设置,无需进一步交互。

作为一般规则,应尽可能避免使脚本需要用户输入。必须输入内容来提供脚本是费力的、容易出错的、更难自动化并且使得以后更难重复相同的操作。

答案3

您是否考虑过打开另一个 shell 窗口?如果您被迫使用 VT-100 终端或类似终端,我会感到非常惊讶,这些终端很久以前就已经失宠了。

答案4

我建议使用类似tmuxscreen的终端多路复用器。使用它们,您可以在后台控制台中运行您的程序,并不时检查它的输出,或者在您的程序在控制台上发生任何活动时发出通知。或者甚至在单独的窗格中运行它,并在其他窗格中执行其他工作时查看程序输出。

相关内容