Есть и другие варианты. Я думаю стандарт "читайте эту книгу и скажи мне, чему ты научился". В зависимости от книги, это может стать началом работы по фактической тезис, но в любом случае это позволяет потенциальному советник задержка и сокращение тех пор, пока студент не достаточно хорошо поняли эту книгу. Вы уверены в этом? Потому что в kmix я могу контролировать двух выходов независимо друг от друга (отключить один из них, изменять громкость и т. д.). Просто потому, что они воевали, не означает, что они могут использовать ниндзюцу. Мы не видели ни одного дзюцу использовать любой из клонов Лимбо.

Первое, что нужно понять в этом процессе, как СШ обрабатывает свои аргументы. Я не имею в виду аргументы, что ты пытаешься убежать, но аргументы СШ. Когда вы вызываете СШ, аргументы после удаленного узла, спецификация (пользователь@сервер) объединяются вместе, и прошли через оболочку на удаленном конце. Это важно, а просто потому, что ваши аргументы правильно разделить на местной стороне, не означает, что они будут правильно разделить на удаленной стороне.

Использовать ваш пример:

СШ@пользователя сервера 'Echo "Привет 1 $"' ш "мир"

Эти аргументы заставляют объединяются как команда:

Echo "Привет $1" ш мир

Именно поэтому вы получаете

привет СГ мира

Двойное пространство между привет И Ш - это потому что там $1 должен идти, но нет $1.

 

В качестве другого примера, без $1, это:

SSH пользователь@сервер Эхо "Foo бар" баз

Какие результаты на выходе:

Василий Пупкин баз

Это потому, что аргументы были сцеплены вместе, так что вы в конечном итоге с помощью команды:

Эхо Foo бар Базом

 

Так как нет никакого способа, чтобы обойти команды прошли через оболочку, вы просто должны убедиться, что то, что вы прошли может пережить оценки раковины. Как я обычно сделать это с помощью функции printf "%м "

Например:

КМД=(Эхо "Foo бар" баз)
SSH пользователь@сервер "$(е "%м " "${cmd и[@]}")"

Какие результаты на выходе:

Василий Пупкин баз

Пока она чище и легче разобраться с УМК отдельного ВАР, это не требуется. Следующих работах:

SSH пользователь@сервер "$(е "%м " эхо "Foo бар" баз)"

 

Это также хорошо работает с вашим примером аргумент оболочки:

КМД=(Ш-с 'Эхо 1="<$1>" 2="<$2>" 3="<$3>"' ш "мой арг1" "мой аргумент2" "мое значение arg3")
SSH пользователь@сервер "$(е "%м " "${cmd и[@]}")"

Какие результаты на выходе:

1=<мой арг1> 2=<Мой аргумент2> 3=<мое значение arg3>

 


В качестве альтернативного решения, вы можете передать вашу команду как полноценный скрипт. Например:

SSH пользователь@сервер <<'ВФ'
Ш-с 'Эхо 1="<1$>" 2="<$2>" 3="<3$>"' ш "мой арг1" "мой аргумент2" "мое значение arg3"
ВФ

Есть и недостатки в этом решении, хотя, как это трудно сделать программно (генерации документа для передачи на устройства stdin). Также так как вы используете стандартный ввод, если вы хотите, чтобы скрипт на удаленной стороне для чтения стандартного ввода, вы не можете (по крайней мере, не без некоторой хитрости).