Wie kann ich an dieser Stelle in meinem TCL-Skript einen bestimmten Fehlercode zurückgeben?

Wie kann ich an dieser Stelle in meinem TCL-Skript einen bestimmten Fehlercode zurückgeben?

Ich habe ein TCL-Expect-Skript, das einen SCP-Befehl zum Hochladen einer Konfigurationsdatei auf meinen DNS-Server ausführt:

#!/usr/bin/expect -f

set config "~/dnsmasq.conf"

spawn /usr/bin/scp "$config" [email protected]:/etc/dnsmasq.conf

expect {
    -re ".*yes.*no.*" {
        exp_send "yes\r"
        exp_continue
    }
    -re ".*password.*" {
        exp_send "$password\r"
        expect {
            -re ".*denied.*" {
                exit 7
            }
        }
    }
}

Ich möchte einen bestimmten Fehlercode zurückgeben, wenn das scp-Dienstprogramm nicht gefunden werden kann. Derzeit wird das Skript mit dem Status 1 beendet. Wenn das Skript mit dem Status 7 beendet wird, kann ich damit umgehen, da ich weiß, dass es sich um einen Zugriffsverweigerungsfehler handelt. Der im Apache-Protokoll angezeigte Fehler lautet:

couldn't execute "/usr/bin/scp": no such file or directory
    while executing
"spawn /usr/bin/scp "$config" [email protected]:/etc/dnsmasq.conf"

Wie kann ich an dieser Stelle einen Fehlercode von 5 oder so zurückgeben?

Antwort1

Am besten prüfen Sie, ob es existiert und ausführbar ist:

if { ! ([file exists /usr/bin/scp] && [file executable /usr/bin/scp])} {
    puts stderr "/usr/bin/scp does not exist or is not executable"
    exit 7
}

spawn /usr/bin/scp ...

verwandte Informationen