Ich muss ein Remote-Skript mit sshvia Ruby( net / ssh ) ausführen, um einen Ordner rekursiv zu kopieren und einen Unterordner auszuschließen. Ich suche nach dem schnellsten Weg, also rsyncist es nicht gut. Auch ich verstehe das sshnutzt shund nicht bash.
In Bash mache ich:
cp -r srcdir/!(subdir) dstdir
und es funktioniert gut. Wenn ich das Skript jedoch über sshstarte, erhalte ich den Fehler
sh: 1: Syntax error: "(" unexpected
weil es benutzt sh.
Ich habe die shManpage überprüft , aber es gibt keine Möglichkeit, Dateien auszuschließen.
Ist es meine Annahme ssh, shrichtig zu verwenden? Irgendein alternativer Vorschlag?
EDIT 1:
Falls es nützlich ist, ist die Ausgabe von sudo cat /etc/shellsder folgenden:
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen
EDIT 2:
OK. Bash es ist verfügbar und das scheint nicht das Problem zu sein. Ich habe überprüft, dass der SSH tatsächlich verwendet bash. Das Problem scheint mit dem Entkommen von Klammern oder Ausrufezeichen zu tun zu haben. Ich habe versucht, den Befehl über die Shell (MacOS) auszuführen, und dies ist der eigentliche Befehl:
ssh -i .ssh/key.pem ubuntu@X.X.X.X 'mkdir /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; cp -r /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!\(constant\) /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; ln -s /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/constant /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N/constant'
Auf diese Weise erhalte ich einen anderen Fehler
cp: cannot stat '/home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!(constant)': No such file or directory
EDIT 3:
Basierend auf den Kommentaren habe ich meinen Befehl zum Hinzufügen geändertextglob
Wenn ich benutze
ssh -i .ssh/key.pem ubuntu@X.X.X.X 'shopt -s extglob; mkdir /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; cp -r /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!\(constant\) /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; ln -s /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/constant /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N/constant'
Ich erhalte folgende Fehlermeldung:
cp: cannot stat '/home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!(constant)': No such file or directory
Wenn ich der Klammer nicht entkomme, bekomme ich
bash: -c: line 0: syntax error near unexpected token `('
ssh(gutsshd) verwendet die Login-Shell des Remote-Benutzers. Könnte alles sein.