如果我有一个bash脚本,它就像这个
#!/bin/bash -p
echo "PART A PID $$" >> "txt$$.txt";
for ((a=1; a<=10; a++))
do
sleep 1
echo "PART B$a" >> "txt$$.txt";
done
echo "PART C" >> "txt$$.txt";
我知道./script.sh & disown
可以防止SSH退出时脚本停止,但我希望在不需要将脚本放在后台的情况下实现这一点。
PART A
PART B1
PART B2
PART B3
PART B4
PART B5
PART B6
PART B7
PART B8
PART B9
PART B10
PART C
得到这样的输出。
我想等待循环得到有序的输出。
注意(我不想要nohup(
编辑
我这么做是因为我想开始不止一个这样的事情。
如果我做一些类似的事情
#!/bin/bash -p
(
echo "PART A PID $$" >> "txt$$.txt";
for ((a=1; a<=10; a++))
do
sleep 1
echo "PART B$a" >> "txt$$.txt";
done
echo "PART C" >> "txt$$.txt";
) & disown
PID改变。这样,如果我想停止进程,我就无法获得pid的原始引用。
我想知道是否有一些简单的东西可以放在底部,而不会打乱所有的代码
正如您在评论中所解释的,您的真正目标是默认情况下让您的脚本仍然在前台运行,但要确保它能够在SSH断开连接后继续运行。
您可以在不需要disown
的情况下完成此操作,尽管代码需要放在顶部,而不是底部:
#!/usr/bin/env bash
# redirect all three of stdin, stdout and stderr (not just stdout!)
exec >"txt$$.txt" 2>"err$$.txt" </dev/null
# ignore any SIGHUP signals received
trap : SIGHUP
# ...put the content of your script here