É possível obter o SSH para encaminhar argumentos vazios?

0

Estou tentando executar um script remoto com SSH e esse script altera seu comportamento dependendo se um argumento específico está vazio ou não. Aqui está um exemplo mínimo, onde eu criei um simples tmp.sh arquivo que ecoa o número de argumentos e, em seguida, quais são os argumentos. Quando eu o executo localmente, ele funciona como esperado, dizendo que ele tem 3 argumentos. Mas quando eu executo o script através do SSH, ele diz que só tem 2 argumentos:

$ cat argtest.sh 
#!/bin/bash

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

Existe uma maneira de obter o SSH para encaminhar o argumento vazio, então o script diz que ele tem 3 argumentos?

Cornstalks
fonte

Respostas:

2

Experimentar

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

Eu faço algo similar com minhas invocações de Perl remotas que devem funcionar para o seu script bash também - com algumas mudanças de sintaxe de bash, é claro ...

Use variáveis ​​de ambiente para "passar variáveis" (definidas ou não) para o processo remoto. Por exemplo,

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

então, no seu script remoto, apenas verifique a existência de variável, como em:

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

Então, quando o acima é invocado

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

Como você pode ver, consegui verificar a existência da variável de entrada na chamada remota.

Isso deve funcionar para você.

Billy McCloskey
fonte
Interessante. Boa ideia.
Cornstalks