在脚本内执行 2>&1 重定向

在脚本内执行 2>&1 重定向

是否可以从另一个脚本中运行一个脚本,并将重定向包含到日志文件中?

我正在尝试从一个较大的脚本中运行 3 个脚本。其中之一需要“现在”运行。这是我应该手动执行的操作的示例:

sample_script1.sh
at now
sample_script2.sh > sample_script2.log
2>&1
(CTRL + D)
tail -f sample_script2.log
sample_script3.sh

我已经尝试过这个(以及使用不同语法的几个不同的迭代,特别是带引号的迭代):

sample_script_location="$HOME/sample_script.sh"
sample_script_log_location="$HOME/sample_script.log"
echo ""$sample_script_location" > "$sample_script_log_location" 2>&1" | at now

按设计运行时,手动过程会将“SQL> SP2-0042:未知命令“2>&1””放在日志文件的底部。当我使用将回显传送到“现在”的脚本执行此操作时,不会出现此消息。

答案1

{ echo a; echo b 1>&2; echo c 1>&2; } 2>&1
a
b
c

您可以在 {} 大括号中包含一些命令。看help {

at now可以喂食所谓的here-document

sample_script1.sh
at now 2>&1 <<EOF
sample_script2.sh > sample_script2.log
EOF
tail -f sample_script2.log &
sample_script3.sh

如果要将 script2 的 stderr 写入日志,则需要2>&1>sample_script2.log

sample_script1.sh
at now <<EOF
sample_script2.sh 2>&1 >sample_script2.log
EOF
tail -f sample_script2.log &
sample_script3.sh

tail -f命令会一直运行,直到您取消它为止,因此您应该将其置于后台,或将其作为最后一个命令启动。看help bg

相关内容