Я пытаюсь выполнить удаленный сценарий с SSH, и этот сценарий меняет свое поведение в зависимости от того, является ли конкретный аргумент пустым. Вот минимальный пример, где я создал простой файл tmp.sh который отображает количество аргументов и затем, что это за аргументы. Когда я выполняю его локально, он работает как положено, говоря, что получил 3 аргумента. Но когда я выполняю скрипт через SSH, он говорит, что получил только 2 аргумента:

$ cat argtest.sh 
#!/bin/bash

echo $#
echo $@
$ ./argtest.sh foo '' bar
3
foo bar
$ ssh user@localhost ./argtest.sh foo '' bar
2
foo bar

Есть ли способ получить SSH для пересылки пустого аргумента, поэтому скрипт говорит, что он получил 3 аргумента?

2 ответа2

2

Пытаться

  ssh user@localhost "./argtest.sh foo '' bar"
1

Я делаю нечто подобное с моими удаленными вызовами Perl, которые также должны работать для вашего bash-скрипта - с некоторыми изменениями синтаксиса bash, конечно ...

Используйте переменные среды, чтобы "передать переменные" (установить или иным образом) в удаленный процесс. Например,

$ ssh me@localhost 'VAR1="var1 text" /tmp/try.pl'

затем в вашем удаленном скрипте просто проверьте наличие переменных, как в:

$ cat /tmp/try.pl
#!/usr/bin/perl
if ($ENV{VAR1}) { print "$ENV{VAR1}\n"; }
if ($ENV{VAR2}) { print "$ENV{VAR2}\n"; }

поэтому, когда вышеупомянутый вызывается

$ ssh me@localhost 'VAR1="var1 text" /tmp/try.pl'
var1 text

Как видите, я смог проверить существование входной переменной при удаленном вызове.

Это должно работать для вас.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .