Você estava muito perto do seu exemplo. Funciona bem quando você o usa com argumentos como esses.
Script de exemplo:
$ more ex.bash
#!/bin/bash
echo $1 $2
Exemplo que funciona:
$ ssh serverA "bash -s" < ./ex.bash "hi" "bye"
hi bye
Mas isso falha para esses tipos de argumentos:
$ ssh serverA "bash -s" < ./ex.bash "--time" "bye"
bash: --: invalid option
...
O que está acontecendo?
O problema que você está enfrentando é que o argumento -time
ou --time
no meu exemplo está sendo interpretado como uma mudança para bash -s
. Você pode pacificar bash
finalizando-o de usar qualquer um dos argumentos de linha de comando restantes usando o argumento --
.
Assim:
$ ssh root@remoteServer "bash -s" -- < /var/www/html/ops1/sysMole -time Aug 18 18
Exemplos
# 1:
$ ssh serverA "bash -s" -- < ./ex.bash "-time" "bye"
-time bye
# 2:
$ ssh serverA "bash -s" -- < ./ex.bash "--time" "bye"
--time bye
# 3:
$ ssh serverA "bash -s" -- < ./ex.bash --time "bye"
--time bye
# 4:
$ ssh < ./ex.bash serverA "bash -s -- --time bye"
--time bye
OBSERVAÇÃO: Apenas para deixar claro que onde quer que o redirecionamento apareça na linha de comando não faz diferença, porque ssh
chama um shell remoto com a concatenação de seus argumentos de qualquer maneira, a citação não faz muita diferença, exceto quando você precisa citar no shell remoto como no exemplo # 4:
$ ssh < ./ex.bash serverA "bash -s -- '<--time bye>' '<end>'"
<--time bye> <end>