Использование аргумента сценария оболочки?

использование sudo su, скорее всего, потеряет все разрешения.

Установите аутентификацию ключа ssh, затем используйте ssh -AY user2@localhost (или ssh -AY user2@localhost xterm)

0
23.12.2016, 04:59
1 ответ

Кавычки не вложены. Вы пытаетесь передать ssh удаленную команду в виде строки с двойными кавычками, содержащей аргумент в одинарных кавычках для awk, а внутри этого аргумента несколько строк с двойными кавычками. Но оболочка воспринимает каждую из этих двойных кавычек как начало или конец строки с двойными кавычками, что вносит путаницу.

В частности, когда вы используете "df -khP | column -t | awk '{print $5 " " $1 " " $2}'" в списке аргументов к ssh, он разбирается на несколько отдельных строк с кавычками. Первая - "df -khP | column -t | awk '{print $5', и поскольку $variable подстановка производится внутри строк с двойными кавычками, а скрипт не получил 5 аргументов, часть $5 заменяется ничем, давая "df -khP | column -t | awk '{print ". Следующим является " $1 ", который расширяется до "192.168.5.210" (потому что это первый аргумент скрипта). Наконец, есть " $2}'", который расширяется до " }'", потому что второго аргумента нет. ssh затем вставляет их вместе с пробелами между ними, выдавая `df -khP | column -t | awk '{print 192.168.5.210 }' в качестве выполняемой команды. Совсем не то, что вы хотели.

Чтобы все работало правильно, вам нужно экранировать (с помощью обратных слешей) определенные символы внутри того, что должно быть одной длинной строкой с двойными кавычками. В частности, все двойные кавычки (чтобы они не завершали строку в кавычках) и знаки доллара (чтобы они не расширялись как параметры или что-то еще). Любые обратные кавычки или обратные слэши также должны быть экранированы, если они есть. Таким образом, вот команда, которая вам нужна:

ssh 192.168.5.209 ssh root@$STRIP "df -khP | column -t  | awk '{print \$5 \" \" \$1 \" \" \$2}'"

BTW, если я правильно понял, причина, по которой awk выводит то, что он делает, заключается в том, что он разбирает 192.168.5.210 как три действительных числа, 192.168, .5 и .210, и печатает их (с ведущими нулями, добавленными там, где это необходимо, и с отстающими нулями, которые не имеют значения) как "192.168", "0.5" и "0.21". Но он не печатает пробелы между ними, поэтому получается "192.1680.50.21".

1
29.04.2021, 00:06

Теги

Похожие вопросы