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, не зная оболочки входа удаленного пользователя? для получения дополнительной информации. на что).