Wie kann ich einen Rückgabecode von der Befehlszeile aus festlegen, ohne meinen SSH-Client zu beenden?

Wie kann ich einen Rückgabecode von der Befehlszeile aus festlegen, ohne meinen SSH-Client zu beenden?

Ich bin ein echter Unix-Neuling und muss derzeit einen Alias ​​erstellen, der eine Datei auf ihre Regulärität und Lesbarkeit prüft. Wenn sie irregulär ist, muss ich 1 als Exit-Code zurückgeben und nicht testen, ob sie lesbar ist. Wenn sie nicht lesbar ist, muss ich 2 als Exit-Code zurückgeben.

alias test="if [ ! -f filename ] ; then echo 'Irregular file'; exit 1 ; fi; if [ ! -r filename ]; then echo 'Unreadable file'; exit 2; fi;

Das Problem ist jetzt, dass beim Ausführen beim Beenden mein gesamter Client geschlossen wird. Gibt es eine Möglichkeit, das zu umgehen?

Antwort1

Da dies der erste Link bei einer Suche in Google ist:

Wenn Sie den Ausgang in Klammern setzen

(exit 2)

dann wird ein Rückgabecode gesetzt, indem die Sub-Shell in den Klammern beendet wird, und Ihre aktuelle Shell wird nicht beendet. Sie können dann wie gewohnt mit $? auf diesen Code testen.

alias mytest="if [ ! -f filename ] ; then echo 'Irregular file'; (exit 1) ; elif [ ! -r filename ]; then echo 'Unreadable file'; (exit 2); fi"

Antwort2

Eine Shell-Funktion sollte in der Lage sein, returneinen gewünschten Wert auszugeben:

checktype() {
    if [ ! -f "$1" ] ; then 
        echo 'Irregular file'
        return 1
    fi 
    if [ ! -r "$1" ]; then 
        echo 'Unreadable file'
        return 2 
    fi
    return 0
}
$ checktype /dev/stdin ; echo $?
Irregular file
1

Außerdem testist es ein schrecklicher Name für einen Alias ​​oder eine Funktion, da es sich um ein Standarddienstprogramm (integriert) handelt.


Mir ist klar, dass ein Pseudonym eine schreckliche Wahl ist, aber derzeit wird es von einem Professor verlangt.

Okay, das ändert die Dinge ein wenig. Mein Vorschlag wäre, dem Prof eine passendere Lösung zu zeigen und zu erklären, warum die einfache nicht funktioniert.

Aber falls das nicht klappt und Sie wirklichmussVerwenden Sie einen Alias. Bedenken Sie, dass der Rückgabewert eigentlich nur der Rückgabewert des zuletzt ausgeführten Befehls ist. Sie sollten in der Lage sein, etwas zu konstruieren, das den gewünschten Wert zurückgibt ...

(Wenn es sich um Hausaufgaben handelt, wäre es meiner Meinung nach nicht fair, sofort eine vollständige Lösung bekannt zu geben. Spoiler unten.)

Hinweis: Sie haben bereits einen Befehl verwendet, der einen beliebigen Wert zurückgibt.

Antwort3

aliasist hier eine schlechte Wahl. Fügen Sie diese Zeilen in eine Bash-Skriptdatei ein.

#!/bin/bash
if [ ! -f filename ];
 then echo 'Irregular file'; exit 1 ;
fi;
if [ ! -r filename ];
 then echo 'Unreadable file'; exit 2;
fi;

Es wird wie vorgesehen funktionieren.

verwandte Informationen