您可以将主脚本分解为函数/较小的脚本,以实现后台进程和前台进程混合的所需行为。
例如,在您的主脚本中:
#!/bin/sh
echo "Starting script..."
# do so more stuff here, maybe ask user for input
./run_background_process_1 &
# ask the user for some more input
./run_background_process_2 &
...
使用&
脚本调用末尾的符号表示它们应该在后台运行。
(更新)如果您想将所有内容保存在 1 个脚本中,请使用函数来分解/封装您希望在后台运行的逻辑部分。通过在调用后缀 来调用这些函数,&
同上。
您可以尝试以下示例以查看它是否有效:
#!/bin/sh
hello() {
condition="yes"
while [[ $condition== "yes" ]]
do
echo "."
sleep 1
done
}
# Script main starts here
echo "Start"
hello &
echo "Finish"
删除&
之后hello
,您会发现它的行为有所不同。
有一些工具可以让您在失去连接的情况下保持脚本运行。例如,查看http://www.gnu.org/software/screen/ - 它的功能之一是Programs continue to run when their window is currently not visible and even when the whole screen session is detached from the users terminal.