GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unfähig, den richtigen Exit-Code aus einem Skript zu erhalten?

Ich habe ein Skript, das über SFTP eine Verbindung zu einem Remote-Server herstellt und von dort eine Datei erhält. Mein Skript geht so:

/usr/bin/sftp [email protected] <<EOF
lcd /dir1/dir2/dir3
cd /rsdir1/rsdir2/rsdir3
get file_pattern`date -d "last month" +%m%Y`.csv
EOF
rc=$?
        if [[ $rc != 0 ]]
           then
        echo "Error occured getting file and the script abended with error code $rc" `date "+%Y-%m-%d-%H.%M.%S"`
            exit 1
    else
    echo "Successfully transferred the file" `date "+%Y-%m-%d-%H.%M.%S"`
        fi

Aber selbst wenn das Skript die Datei mit dem Muster nicht findet, geht es zu else Teil des Skripts und gibt mir die Ausgabe auf dem Bildschirm als

Connecting to remote.server.com...
sftp> lcd /dir1/dir2/dir3
sftp> cd /rsdir1/rsdir2/rsdir3
sftp> get file_pattern032014.csv
Couldn't stat remote file: No such file or directory
File "/rsdir1/rsdir2/rsdir3/file_pattern032014.csv" not found.
Successfully transferred the file YYYY-MM-DD-24HH.MI.SS 

Irgendwelche Ratschläge, was ich hier falsch mache?

Akzeptierte Antwort:

Sie haben den richtigen Rückgabecode, die sftp-Sitzung wurde korrekt ausgeführt, sodass der Rückgabecode 0 ist.
Sie sollten scp verwenden stattdessen gibt es nicht 0 zurück, wenn es nicht kopiert werden kann.

Sie könnten so etwas tun:

file=file_pattern`date -d "last month" +%m%Y`.csv 
[email protected]:/rsdir1/rsdir2/rsdir3/$file
local=/rsdir1/rsdir2/rsdir3/$file

if scp -q $remote $local
then
    echo "Successfully transferred the file" `date "+%Y-%m-%d-%H.%M.%S"`
else
    echo "Error occured getting file and the script abended with error code $?" `date "+%Y-%m-%d-%H.%M.%S"`
    exit 1
fi

BEARBEITEN:Ich habe das Kopierziel in einen Dateinamen geändert:Wenn Sie in ein Verzeichnis kopieren und dieses Verzeichnis fehlt, erstellen Sie eine Datei mit dem Verzeichnisnamen.


Linux
  1. Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner?

  2. Wie entferne ich die Bom aus einer UTF-8-Datei?

  3. Wie erhalte ich weitere Informationen über die Herkunft eines Ausgangscodes?

  4. Bash + So beenden Sie beide Male das sekundäre Skript und das Hauptskript

  5. So erhalten Sie den Exit-Status in einer Bash-Schleife

So erhalten Sie den Dateinamen aus dem vollständigen Pfad in Linux

Der Atom-Texteditor kann nicht aus dem Software Center abgerufen werden?

Variable in Bash-Skript, die ihren Wert von der letzten Ausführung beibehält

Holen Sie sich die ersten 5 Zeichen aus jeder Zeile im Shell-Skript

Wie erhalte ich den Exit-Code des erzeugten Prozesses im erwarteten Shell-Skript?

Wie kann ich die Länge einer Videodatei von der Konsole abrufen?