我的意图是将bash脚本的所有输出显示在控制台并记录到文件中。
这是我的预期工作的脚本。
#!/bin/bash
LOG_FILE="test_log.log"
touch $LOG_FILE
# output to console and to logfile
exec > >(tee $LOG_FILE) 2>&1
echo "Starting command ls"
ls -al
echo "End of script"
然而我不明白为什么它会那样工作。
我预期exec >>(tee $LOG_FILE) 2>&1
能够工作,但它失败了,尽管exec >$LOG_FILE 2>&1
确实可以工作。
我在bash手册和高级bash脚本编程指南中都找不到关于exec > >(command )
结构的原因。你能解释一下其背后的逻辑吗?
syntax error near unexpected token `>'
有人知道我缺少了什么吗? - Kenny#!
前缀(我假设缺少的!
是一个打字错误)将被视为注释。sh
与bash
不同。 在某些平台上,/bin/sh
是指向/bin/bash
的符号链接,但是如果以这种方式运行它,bash
会聪明地尝试表现得像sh
(程序可以找出调用它的名称)。 - cdarkeexec > >(tee $LOG_FILE) 2>&1
对于记录作为 cron 作业调用的可执行脚本的所有输出是非常有用的!请参见此问答:Super User: How can I view results of my cron jobs?,特别是这个答案。 - Gabriel Staples