Непоследовательное поведение перенаправления ssh интерактивный по сравнению с командами

Можно использовать

sed -i -e 's/\$\$file_name=.*/&V1/' file.txt   
4
15.08.2014, 00:42
2 ответа

Я думаю, ваша локальная оболочка удаляет ваши кавычки. Вы можете попробовать

ssh remote sh -c '"echo hi > hi.txt"'

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

Хорошее объяснение этого можно найти в Цитата на оболочку Unix / Linux для удаленных оболочек

3
27.01.2020, 20:54

Это, вероятно, самая запутанная и раздражающая вещь при работе с ssh (по крайней мере, на мой взгляд).

Причина такого поведения в том, что ssh не сохраняет аргументы при выполнении удаленной команды. Он берет все ваши аргументы и объединяет их вместе, разделенные пробелами.

Итак, когда вы запускаете

ssh remote sh -c 'echo hi > hi.txt'

Фактически, вы выполняете следующее:

ssh remote 'sh -c echo hi > hi.txt'

Это запускает sh -c echo , передает оболочку ( не echo ) аргумент hi (который не используется) и перенаправляет вывод на hi.txt .

Решение, предлагаемое chthonous (вложенное цитирование), является одним из способов решения этой проблемы. Давайте посмотрим на это:

ssh remote sh -c '"echo hi > hi.txt"'

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

ssh remote 'sh -c "echo hi > hi.txt"'
2
27.01.2020, 20:54

Теги

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