plik skryptu powłoki (.sh) - polecenie dynamiczne

1

Próbuję zbudować dynamiczne polecenie do wykonania w pliku .sh, jednak kiedy to robię, wydaje się, że w jakiś sposób dodaje on znaki, więc polecenie nie jest poprawnie wykonywane.

Zauważ, że używam tego przez okna, używając bash.exe. Przykład kodu:

Mój plik command.cmd:

bash --login -x command.sh Parameter1

Mój plik .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"

Jeśli uruchomię polecenie statycznie, działa to idealnie:

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'

Ale jeśli uruchomię go tak, jak w pliku .sh, wyświetli następujące informacje:

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.]

Domyślam się, że jest to uruchamiane w systemie Windows, w dynamicznej zmiennej polecenia nie jest dobrze ukształtowane, więc polecenie nie działa dobrze. Jeśli zamiast eval wykonuję echo, wynikiem jest:

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'

Co wydaje się idealne.

Co ja tu nie robię?

Dziękuję Ci.

pacojones
źródło
Próbować lamówka twoje dane wejściowe (usuń początkowe / końcowe białe znaki)
Nifle

Odpowiedzi:

1

Nevermind, okazało się, że to Windows dodaje nieprawidłowe znaki. Dzięki Notepad ++ oszczędzanie jako Unix / Linux działało jak urok.

pacojones
źródło