Mein Skript enthält einen ssh
Befehl zum Anmelden beim Remote-Server und zum Ausführen einiger Befehle. Der Befehl prüft, ob eine Datei vorhanden ist, und sollte, wenn nicht, das gesamte Skript ausführen.
ssh $user@$hostname "if[ -f $filename];then
echo"file exists Proceeding next steps;
else
"echo file doesn't exist";
exit 1;
fi"
Der obige Befehl wird jedoch erfolgreich ausgeführt, wenn die Datei vorhanden ist. In anderen Fällen, wenn die Datei nicht vorhanden ist, wird der Exit-Befehl einfach aus der SSH-Sitzung herausgeführt.
Es fährt weiterhin mit anderen Befehlen im Skript fort, anstatt das Skript zu beenden.
Bitte helfen Sie mir mit Ihren Vorschlägen.
Antwort1
Um ein Skript mit SSH auszuführen, das bestimmte, zuvor festgelegte Variablen benötigt, z. B. Ihre $filename
, gehen Sie wie folgt vor:
ssh user@host 'bash -s' < local_script.sh "$filename"
Inhalt von local_script.sh:
#!/bin/bash
[ $# -ne 1 ] && echo '$0 needs at least 1 parameter' 1>&2 && exit 2
filename="$1"
if [ ! -f "$filename" ]; then
echo "[ $filename ] does not exist"
exit 1
fi
echo "[ $filename ] exists"
Wenn Sie in Ihrem auszuführenden Befehl keine übergebenen Variablen benötigen, funktioniert Folgendes:
ssh user@host '
if [ ! -f "test/stuff" ]; then
echo "File does not exist"
exit 1
fi
echo "File exists"
'
Beachten Sie die einfachen Anführungszeichen '
, sie verhindern, dass Ihr Befehlerweitert.
Außerdem habe ich auf die Nichtexistenz von „ $filename
first“ geachtet, um die Anzahl der Codezeilen zu reduzieren, und habe Tabs/Leerzeichen verwendet.
Um Ihren Befehl lesbarer zu machen, versuchen Sie Folgendes
ssh user@host <<'ENDSSH'
if [ ! -f "test/stuff" ]; then
echo "File does not exist"
exit 1
fi
echo "File exists"
ENDSSH