Nevermind fand heraus, dass Windows ungültige Zeichen hinzufügte. Mit Notepad ++ funktionierte das Speichern als Unix / Linux wie ein Zauber.
Shell-Skriptdatei (.sh) - dynamischer Befehl
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 Antwort auf die Frage
Verwandte Probleme
-
1
Pausieren Sie alle Aufgaben außer x CPU-intensiven Aufgaben
-
10
Wie kann ich die Bash-Historie durchsuchen und einen Befehl erneut ausführen?
-
2
Kann die Ausgabe eines Befehls an zwei andere Befehle weitergeleitet werden?
-
10
Wie richte ich SSH ein, damit ich mein Passwort nicht eingeben muss?
-
3
Wie kann ich ssh verwenden, um einen Befehl auf einem Remote-Unix-Computer auszuführen und zu beende...
-
8
Benennen Sie eine Gruppe von Dateien mit einem Befehl um
-
2
Warum aktualisiert sich mein Pfad nicht * jetzt *?
-
5
Wie entferne ich einen symbolischen Link zu einem Verzeichnis?
-
8
Rette mich vor dem Kauderwelsch
-
9
Wie kann ich jeder Zeile einer Textdatei eine Zeilennummer und einen Tabulator voranstellen?