将几行从 stdout 复制到 stderr - 但前提是 stderr 与 stdout 不同

将几行从 stdout 复制到 stderr - 但前提是 stderr 与 stdout 不同

我有一个 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.shbasckup.sh >/dev/null

相关内容