![在脚本内执行 2>&1 重定向](https://linux22.com/image/67328/%E5%9C%A8%E8%84%9A%E6%9C%AC%E5%86%85%E6%89%A7%E8%A1%8C%202%3E%261%20%E9%87%8D%E5%AE%9A%E5%90%91.png)
是否可以从另一个脚本中运行一个脚本,并将重定向包含到日志文件中?
我正在尝试从一个较大的脚本中运行 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
。