2014-12-13 2 views
-1

Я использую здесь документ sh для запуска некоторых команд. теперь я хочу проанализировать вывод этих команд с помощью awk. Тем не менее, каждый раз, когда я его выполняю, я получаю вывод команды с добавлением чего-то вроде этого: «Нет такого дочернего процесса»используя здесь документ и трубопровод sh в то же время

Так выглядит мой сценарий.

#!/bin/sh 
com = "sudo -u username /path/of/file -l" 
$com <<EOF | awk '{print $0}' 
Commands. 
. 
. 
. 
EOF 

Как я буду использовать heredoc и конвейер без добавления этой нежелательной строки? Благодаря

ответ

0

Ваше присвоение переменной является неправильным в нескольких отношениях. Во-первых, вы фактически не назначаете переменную; вы пытаетесь запустить команду с именем com, аргументами которой являются = и строка "sudo ...". Пробелы не должны быть использованы по обе стороны от =:

com="sudo ..." 

Во-вторых, командные строки не должны храниться в переменной; синтаксический анализатор оболочки может только сделать эту работу так, как вы намереваетесь для очень простых команд. Введите команду в полном объеме или используйте функцию оболочки.

com() { 
    sudo -u username /path/to/file -l 
} 

com <<EOF | awk '{print $0}' 
... 
EOF 
+0

Он работает !!! Благодаря! : D – user3714598

0

Там нет никаких проблем, проверьте:

$ cat <<EOF | awk '{print $1}' 
a b c 
1 2 3 
EOF 
a 
1 
+0

Странно. потому что, если вы печатаете $ 0, он дает вам результат плюс что-то вроде этого в конце «% No такой дочерний процесс 4330» – user3714598

Смежные вопросы