【问题标题】:Bash: wrong pipe output when using "sudo sh -c"Bash:使用“sudo sh -c”时管道输出错误
【发布时间】:2011-06-01 21:30:02
【问题描述】:

我有一个命令管道,我使用"sudo sh -c" 在整个管道命令中获得 sudo 权限。

我面临的问题是awk 这样的命令在使用"sudo sh -c" 时具有不同的行为。

特别是,

sudo wc -c Mybib.bin |sudo awk '{print $1;}'

1509644

同时

sudo sh -c "wc -c Mybib.bin |awk '{print $1;}'"

1509644 Mybib.bin

所以,在第二种情况下,awk 命令似乎根本没有被调用。

感谢您的帮助。

【问题讨论】:

    标签: linux redirect pipe sudo


    【解决方案1】:

    是的,但是双引号允许在调用之前替换 $1,从而导致 {print ;}

    sudo sh -c "wc -c Mybib.bin |awk '"'{print $1;}'"'"
    

    还有……

    sudo sh -c "wc -c < Mybib.bin"
    

    【讨论】:

    • 非常感谢!您提供的第一个解决方案对我不起作用(它提供1509644 Mybib.bin),但第二个解决方案可以。这是awk 的一个属性,即每当使用双引号时,变量在调用之前被替换还是与"sudo sh -c" 有关?
    • 两者都不是。它与您在其中调用 sudo 的 shell 有关。
    【解决方案2】:

    我还发现你也可以在 sh -c 中转义元素。

    例如: sudo sh -c "wc -c Mybib.bin |awk '{print \$1;}'"

    至少..现在我遇到的问题与您的问题相似,这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-10
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2013-10-31
      相关资源
      最近更新 更多