Shell-Skriptdatei (.sh) - dynamischer Befehl

1060
pacojones

Ich versuche, einen dynamischen Befehl zu erstellen, der in einer .sh-Datei ausgeführt wird. Wenn ich es jedoch mache, scheint es, dass er \ r Zeichen hinzufügt, so dass der Befehl nicht korrekt ausgeführt wird.

Beachten Sie, dass ich dies über Windows mit bash.exe verwende. Ein Beispiel für Code:

Meine command.cmd-Datei:

bash --login -x command.sh Parameter1 

Meine .sh-Datei:

#!/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" 

Wenn ich den Befehl statisch ausführe, funktioniert er perfekt:

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' 

Wenn ich es jedoch in der .sh-Datei so liege, wird Folgendes ausgegeben:

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

Meine Vermutung ist, da dies unter Windows läuft, ist etwas in der dynamischen Befehlsvariable nicht gut geformt, sodass der Befehl nicht gut ausgeführt wird. Wenn anstelle von eval ein Echo ausgeführt wird, lautet die Ausgabe:

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' 

Welches scheint perfekt zu sein.

Was mache ich nicht hier?

Vielen Dank.

1
Versuchen Sie [Trimmen] (http://stackoverflow.com/questions/4422491/how-do-i-trim-lines-read-from-standard-input-on-bash) Ihre Eingabe (entfernen Sie führende / nachgestellte Leerzeichen). Nifle vor 9 Jahren 0

1 Antwort auf die Frage

1
pacojones

Nevermind fand heraus, dass Windows ungültige Zeichen hinzufügte. Mit Notepad ++ funktionierte das Speichern als Unix / Linux wie ein Zauber.