Запуск команды ssh без кавычек

Prueba esto:

awk -F'[_.]' '{print $2; print $1}'  <<< "3302491505_8139829707_13970101.csv" 

-Festablece el separador de campo en _o .. Permite configurar los campos $1y $2.

0
14.05.2019, 01:16
2 ответа

Да, есть:

$ ssh host.example.com echo this is a test
this is a test
0
28.01.2020, 02:22

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

Попробуйте записать дату удаленной системы в файл с именем date.outв домашнем каталоге пользователя userна удаленной системе host. Один из способов сделать это с помощью кавычек —:

ssh user@remote 'date > date.out'

Неправильная попытка запустить эту команду без кавычек может быть:

ssh user@remote date > date.out

Это приводит к тому, что локальная обработка оболочки > date.outоставляет удаленную команду ssh просто date. Команда dateзапускается удаленно, но ее вывод сохраняется локально. Чтобы этого избежать, нужно экранировать символ >:

ssh user@remote date \> date.out

Выполнив эту команду, мы можем перейти ко второму примеру. Давайте проверим выходной файл, используя команду в кавычках для lsфайла и catего содержимого:

ssh user@remote 'ls -l date.out; cat date.out'

Команда без кавычек:

ssh user@remote ls -l date.out; cat date.out

удаленно запускает только команду ls. Команда catвыполняется локально, поскольку локальная оболочка интерпретировала символ точки с запятой как разделитель между двумя командами.

Для корректного выполнения команды без кавычек используется:

ssh user@remote ls -l date.out\; cat date.out

Аналогичные правила применяются, когда кто-то хочет использовать расширения переменных или параметров в команде. Если переменная определена в локальной среде, кавычки (или escape-последовательности )часто не нужны. Если локальный пользователь alexвыдает команду:

ssh user@remote echo $USER

Выход будет alex,потому что локальное значение $USER было расширено в команду ssh до того, как оно было отправлено на удаленный хост. Если бы вместо этого команда была двойной -в кавычках:

ssh user@remote "echo $USER"

Результат будет таким же, потому что локальная оболочка будет расширять переменные, заключенные в двойные кавычки. Однако любая из команд:

ssh user@remote 'echo $USER'

или

ssh user@remote echo \$USER

напечатает user, потому что расширение строки $USERвыполняется удаленным хостом, а не локальной оболочкой.

7
28.01.2020, 02:22

Теги

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