Bash: неверный вывод канала при использовании «sudo sh -c» - PullRequest
1 голос
/ 02 июня 2011

У меня есть канал команд, и я использую "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 вообще не вызывается.

Спасибо за любую помощь.

Ответы [ 2 ]

3 голосов
/ 02 июня 2011

Да, но двойные кавычки позволяют заменять $1 перед вызовом, в результате чего {print ;}.

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

Также ...

sudo sh -c "wc -c < Mybib.bin"
1 голос
/ 12 октября 2011

Я также обнаружил, что вы также можете экранировать элементы в sh -c.

Например: sudo sh -c "wc -c Mybib.bin |awk '{print \$1;}'"

По крайней мере ... это работает для меня прямо сейчас с проблемой, с которой я столкнулся, которая была похожа на вашу.

...