Я пытаюсь выбрать только столбец с помощью awk в командах ОС как uname-a, время работы, с помощью pssh несколько команд, Но он не дает корректный вывод. Используя "uname-a" просто пример, который я показал, я означал говорить, что awk не работает даже ни одна команда, я попробовал только конкретное поле времени работы через awk, но никакую удачу. Сообщите мне, если существует возможность..
Моя потребность состоит в том, чтобы поместить команды в ту же строку, и Ниже команда, я пробую, который дает корректный вывод. Но Не с awk
pssh -h /tmp/hosts -i 'echo "$(echo -n);$(date);$(uname -a)"'
[1] 13:41:35 [SUCCESS] server1
;Sun Jan 27 12:41:35 UTC 2019;Linux server1 3.12.74-60.64.99-default #1 SMP Tue Aug 14 07:11:35 UTC 2018 (d28148a) x86_64 x86_64 x86_64 GNU/Linux
[2] 13:41:35 [SUCCESS] server2
;Sun Jan 27 12:41:35 UTC 2019;Linux server2 3.12.74-60.64.99-default #1 SMP Tue Aug 14 07:11:35 UTC 2018 (d28148a) x86_64 x86_64 x86_64 GNU/Linux
Ниже использование команд с командой awk, Не работает
pssh -h /tmp/hosts -i 'echo "$(echo -n);$(date);$(uname -a|awk '{print \$3}')"'
[1] 13:54:54 [SUCCESS] server1
;Sun Jan 27 12:54:54 UTC 2019;
Stderr: awk: cmd. line:1: {print
awk: cmd. line:1: ^ unexpected newline or end of string
[2] 13:54:54 [SUCCESS] server2
;Sun Jan 27 12:54:54 UTC 2019;
Stderr: awk: cmd. line:1: {print
awk: cmd. line:1: ^ unexpected newline or end of string
Вы видите то, что идет не так, как надо, если Вы включаете отладку оболочки удара
$ set -x
$ parallel-ssh -h hostsfile -i 'echo "$(uname -a | awk '{print $3}')"'
+ parallel-ssh -h hostsfile -i 'echo "$(uname -a | awk {print' '})"'
Таким образом, оболочка вызова разделяет команду на два аргумента:
echo "$(uname -a | awk {print
и
$3})"
(с $3
будучи расширенным до пустого значения). Это - один из (редких) случаев, где обычное, "если в сомнении, добавляют, что кавычки" не помогают Вам - двойные кавычки вокруг замены команды в echo
не действительно необходимы, и если Вы удаляете их, можно избавиться от одного уровня вложения кавычки. Затем можно просто сделать
$ parallel-ssh -h hostsfile -i 'echo $(date) $(uname -a|awk "{print \$3}")'
[1] 09:13:36 [SUCCESS] vm
Sun Jan 27 09:13:36 EST 2019 4.4.0-141-generic
[2] 09:13:37 [SUCCESS] localhost
Sun Jan 27 09:13:37 EST 2019 4.15.0-43-generic
где
одинарные кавычки вокруг целого pssh
аргумент препятствует тому, чтобы оболочка вызова развернула и выполнила замены команды локально
двойные кавычки вокруг awk
выражение не предотвращает $3
frombeing, расширенный удаленной оболочкой, таким образом, обратная косая черта выходят из него
С другой стороны, можно добавить литеральные одинарные кавычки вокруг awk
выражение путем открытия и закрытия одинарных кавычек:
'echo $(date) $(uname -a|awk '\''{print $3}'\'')'