Wie beende ich das Skript in einer SSH-Sitzung?

Wie beende ich das Skript in einer SSH-Sitzung?

Mein Skript enthält einen sshBefehl 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 „ $filenamefirst“ 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

Quelle

verwandte Informationen