Команда Grep с использованием содержимого heredoc

ssh объединяет аргументы с пробелами и интерпретирует их оболочкой входа в систему удаленного пользователя, поэтому в:

ssh localhost bash -c 'export foo=bar'

ssh запрашивает удаленную оболочку интерпретировать команду

bash -c export foo=bar

(фактически, если удаленный хост является Unix-подобным, он будет запускать удаленную оболочку с аргументами the-shell , -c и bash -c export foo = bar ).

Большинство оболочек интерпретируют эту командную строку как выполнение команды bash с bash , -c , export и foo = bar в качестве аргументов (так что запустите export , а $ 0 содержит foo = bar ), тогда как вы хотите, чтобы он запускал его с bash , -c и экспортируют foo = bar в качестве аргументов.

Для этого вам нужно будет использовать командную строку, например:

ssh localhost "bash -c 'export foo=bar'"

(или:

ssh localhost bash -c \'export foo=bar\'

, если это важно), чтобы командная строка:

bash -c 'export foo=bar'

передавалась удаленной оболочке. Эта командная строка будет интерпретироваться большинством оболочек как выполнение команды bash с bash , -c и export foo = bar в качестве аргументов. . Обратите внимание, что использование

ssh localhost 'bash -c "export foo=bar"'

не будет работать, если оболочка входа удаленного пользователя была rc или es , например, где " не является специальным оператором цитирования.Одиночные кавычки являются наиболее переносимыми операторами цитирования (хотя есть некоторые различия в их интерпретации между оболочками, см. Как выполнить произвольную простую команду через ssh, не зная оболочки входа удаленного пользователя? для получения дополнительной информации. на что).

1
23.04.2016, 01:23
0 ответов

Теги

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