Não importa, descobri que era o Windows adicionando caracteres inválidos. Com o Notepad ++, salvar como Unix / Linux funcionou como um encanto.
Eu estou tentando construir um comando dinâmico para executar em um arquivo .sh, no entanto, quando eu faço isso, parece que de alguma forma ele adiciona caracteres para que o comando não seja executado corretamente.
Observe que estou executando isso no Windows, usando bash.exe. Uma amostra de código:
Meu arquivo command.cmd:
bash --login -x command.sh Parameter1
Meu arquivo .sh:
#!/bash
#export PATH=.
cmd="ssh-agent bash -c 'ssh-add /cygdrive/C/$1/id_rsa & lftp -u myUser, -e \"mirror --verbose / /cygdrive/C$1/Output; bye\" sftp://domain.com -p 22'"
eval "$cmd"
Se eu executar o comando estaticamente, ele funcionará perfeitamente:
ssh-agent bash -c 'ssh-add /cygdrive/C/$1/id_rsa & lftp -u myUser, -e \"mirror --verbose / /cygdrive/C$1/Output; bye\" sftp://domain.com -p 22'
Mas se eu o executar como está no arquivo .sh, ele mostrará o seguinte:
C:\MyFolder\bin>command.cmd
C:\MyFolder\bin>bash --login -x command.sh Parameter1
+ cmd='ssh-agent bash -c '\''ssh-add /cygdrive/C/Parameter1/id_rsa & lftp -
u myUser, -e "mirror --verbose / /cygdrive/C/Parameter1/Output; bye" sft
'://sftp.domain.com -p 22'\''
+ eval 'ssh-agent bash -c '\''ssh-add /cygdrive/C/Parameter1/id_rsa & lftp
-u myUser, -e "mirror --verbose / /cygdrive/C/Parameter1/Output; bye" sf
'p://sftp.domain.com -p 22'\''
++ ssh-agent bash -c 'ssh-add /cygdrive/C/Parameter1/id_rsa & lftp -u myUser, -e "mirror --verbose / /cygdrive/Parameter1/Output; bye" sftp://sft
'.domain.com -p 22
Identity added: /cygdrive/id_rsa (rsa w/o comment)
'] '/' [Bad port '22.]
Meu palpite é que, como isso está rodando no windows, algo não está bem formado na variável de comando dinâmico, então o comando não roda bem. Se, em vez de eval, eu executar echo, a saída é:
C:\MyFolder\bin>command.cmd
C:\MyFolder\bin>bash --login -i command.sh Parameter1
ssh-agent bash -c 'ssh-add /cygdrive/C/Parameter1/id_rsa & lftp -u myUser, -e "mirror --verbose / /cygdrive/C/Parameter1/Output; bye" sftp://sftp.domain.com -p 22'
O que parece perfeito.
O que eu não estou fazendo aqui?
Obrigado.
Tags ssh bash shell-script lftp