仅记录 stderr 的特定部分?

仅记录 stderr 的特定部分?

找不到任何相关信息,但我试图仅将 stderr 的特定部分记录到文件中。例如

运行tar -xzf file 2>> log.txt并出现错误

tar: Child returned status 1

我只想记录 Child 返回的状态 1 部分,而不包括命令名称。

答案1

tar -xzf file 3>&1 1>&2 2>&3 | grep -oP '^app: \K.*$' | tee logfile

答案2

使用zsh,您可以执行以下操作:

tar -xzf file 2> >(sed 's/^tar: //' >> file.log)

这允许保留tar的退出状态。

你可以做类似的事情kshbash或者yash虽然sed如果该命令使用了file.log

其他选项bash是使用:

{ tar -xzf file 2>&1 >&3 3>&- | sed 's/^tar: //' >> file.log 3>&-; } 3>&1
tar_exit_status=${PIPESTATUS[0]}

请注意,对于多个 shell,您还可以tar使用空 argv[0] 进行调用:

(exec -a '' tar -xzf file)

在这种情况下,错误消息将如下所示:

: Child returned status 1

相关内容