我有一个最终可以运行的脚本,可以自动执行所有计算,但需要一段时间。脚本的开头需要用户输入数据,然后运行直到完成。
如何在用户输入后保持脚本运行,然后在同一个 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
并像这样运行脚本(其中10
和30
是示例数字,分别保存为num1
和num2
):
script.sh 10 30 > out 2>err&
这样,脚本将立即发送到后台,任何输出都将重定向到名为 的文件out
,任何错误消息都将重定向到名为 的文件err
。所有参数均已在启动时设置,无需进一步交互。
作为一般规则,应尽可能避免使脚本需要用户输入。必须输入内容来提供脚本是费力的、容易出错的、更难自动化并且使得以后更难重复相同的操作。
答案3
您是否考虑过打开另一个 shell 窗口?如果您被迫使用 VT-100 终端或类似终端,我会感到非常惊讶,这些终端很久以前就已经失宠了。
答案4
我建议使用类似tmux
或screen
的终端多路复用器。使用它们,您可以在后台控制台中运行您的程序,并不时检查它的输出,或者在您的程序在控制台上发生任何活动时发出通知。或者甚至在单独的窗格中运行它,并在其他窗格中执行其他工作时查看程序输出。