【问题标题】:Why does running `strace echo "hello world" | grep write` show the full strace output?为什么运行`strace echo "hello world" | grep write`显示完整的strace输出?
【发布时间】:2020-08-07 17:11:00
【问题描述】:

这是我正在运行的完整命令。我不确定为什么它不过滤仅写入系统调用。

❯ strace echo "hello world" | grep write
execve("/bin/echo", ["echo", "hello world"], [/* 48 vars */]) = 0
brk(NULL)                               = 0x55f4ad456000
...
write(1, "hello world\n", 12)           = 12
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

【问题讨论】:

    标签: linux shell


    【解决方案1】:

    strace 的输出进入标准错误,而不是标准输出。

    使用重定向写入标准输出:

    strace echo "hello world" 2>&1 | grep write
    

    或者,在最近的 bash 版本中,

    strace echo "hello world" |& grep write
    

    【讨论】:

      【解决方案2】:

      正如用户 choroba 所指出的,strace 的输出进入标准错误。 我只是想指出,您可以通过使用选项 -e write 过滤写入来省略 grepping,尽管您仍然会收到退出消息 "+++ exited with SSS +++",而 grep 会过滤掉该消息。

      另一方面,我在manual 的较新版本strace 上看到,您可以使用-e quiet=exit--silence=exit 过滤掉退出代码消息。

      结果是:

      strace -e write,quiet=exit echo "hello world"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-02
        • 2011-08-16
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多