我想将流程的标准输出和标准错误重定向到单个文件。我在巴什怎么做?
当前回答
您可以将stderr重定向到stdout,并将stdout重定向到文件中:
some_command >file.log 2>&1
见第20章。I/O重定向
这种格式比最流行的仅适用于Bash的&>格式更受欢迎。在Bourne shell中,它可以解释为在后台运行命令。格式也更可读-2(标准错误)重定向为1(标准输出)。
其他回答
您可以将stderr重定向到stdout,并将stdout重定向到文件中:
some_command >file.log 2>&1
见第20章。I/O重定向
这种格式比最流行的仅适用于Bash的&>格式更受欢迎。在Bourne shell中,它可以解释为在后台运行命令。格式也更可读-2(标准错误)重定向为1(标准输出)。
看看这里。应该是:
yourcommand &> filename
它将标准输出和标准错误重定向到文件名。
奇怪的是,这是有效的:
yourcommand &> filename
但这会产生语法错误:
yourcommand &>> filename
syntax error near unexpected token `>'
您必须使用:
yourcommand 1>> filename 2>&1
对于需要“管道”的情况,可以使用|&。
例如:
echo -ne "15\n100\n" | sort -c |& tee >sort_result.txt
or
TIMEFORMAT=%R;for i in `seq 1 20` ; do time kubectl get pods | grep node >>js.log ; done |& sort -h
这些基于Bash的解决方案可以分别处理标准输出和标准错误(从标准错误“sort-c”,或从标准错误到“sort-h”)。
我想要一个解决方案,将stdout和stderr的输出写入日志文件,并且stderr仍在控制台上。所以我需要通过tee复制stderr输出。
这是我找到的解决方案:
command 3>&1 1>&2 2>&3 1>>logfile | tee -a logfile
第一次交换stderr和stdout然后将stdout附加到日志文件将stderr管道到tee,并将其附加到日志文件中