【问题标题】:Shell script hide console messages?Shell脚本隐藏控制台消息?
【发布时间】:2011-08-10 19:22:07
【问题描述】:

我很难从后台运行的 shell (ksh) 脚本中隐藏控制台消息。

我已尝试将其移至 /dev/null,但似乎无法正常工作。这是脚本中的一行:

pid=`/usr/local/bin/lsof | grep 16752 | grep LISTEN |awk '{print $2}'` > /dev/null 2>&1

我启动脚本后的示例:

$ lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.

$ ls -lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.

关于我缺少什么的任何想法?

【问题讨论】:

    标签: shell scripting


    【解决方案1】:

    /usr/local/bin/lsof 2>/dev/null | grep 16752 | grep LISTEN |awk '{print $2}'

    【讨论】:

      【解决方案2】:

      也许您需要重定向实际 lsof 命令的输出而不是 awk?

      【讨论】:

      • 你能给我举个例子吗?
      • 我在想这样的事情:ls -ö 2>&1 | wc -l > dump 2>&1 ö 是为了让 ls 产生错误。
      【解决方案3】:

      您正在重定向变量赋值的输出。由于变量赋值不会产生任何输出,因此您的重定向不会做任何事情。

      反引号捕获命令的标准输出;您需要重定向该命令的标准错误,这意味着重定向需要在反引号之间。

      我的第一个想法是这样做:

      pid=`/usr/local/bin/lsof | grep 16752 | grep LISTEN | awk '{print $2}' 2>/dev/null`
      

      但这只会重定向awk 命令的标准错误。您需要丢弃整个管道的stderr:

      pid=`(/usr/local/bin/lsof | grep 16752 | grep LISTEN | awk '{print $2}') 2>/dev/null`
      

      但我个人更喜欢$(...) 而不是反引号:

      pid=$((/usr/local/bin/lsof | grep 16752 | grep LISTEN | awk '{print $2}') 2>/dev/null)
      

      (请注意,我只是重定向 stderr,而不是 stdout;变量赋值需要 stdout。)

      【讨论】:

        猜你喜欢
        • 2014-02-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-22
        • 2014-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-07
        相关资源
        最近更新 更多