我有一个 bash 脚本“backup.sh”,它将所有内容打印到标准输出,包括备份期间传输的所有文件。
我希望能够保留完整的输出,但是当它被调用时
./backup.sh 2>stderr.log
,那么只需将 stdout 中的几行重要内容复制到 stderr.log 中。
我的脚本当前使用以下函数来打印这些重要的行:
errEcho() {
echo "$1"
echo "$1" 1>&2
}
echo "Some info message"
errEcho "Very important message"
但现在,如果有人简单地将脚本称为
./backup.sh
然后 errEcho 行在标准输出上出现重复。
解决这个问题的最佳方法是什么? (实际上,我希望我的脚本能够识别,如果 stdout == stderr,然后将输出跳过到 stderr,但我不确定,是否需要一种非常不同的方法)。
请注意:我不想有两个脚本,其中一个脚本调用“backup.sh 2>stderr.log”。
答案1
你在这里显然过度设计了。
打印信息行仅有的至stdout
和错误消息仅有的到stderr
。你的问题解决了。
当您从控制台运行脚本并想要隐藏信息消息时,请使用>/dev/null
重定向:这样您只会看到错误行。
答案2
errEcho () {
echo 1>&2 "$@"
}
如果您想查看所有消息,请使用backup.sh 2>&1
或 调用您的脚本;如果您只想查看错误消息,请使用 with 调用您的脚本。backup.sh
basckup.sh >/dev/null