Was ist "Exit 2" vom Status des abgeschlossenen Hintergrundjobs?

12

Ich habe eine Übung, um einige Daten (* conf aus einigen Verzeichnissen) in eine Datei einzufügen, und muss dies im Hintergrund tun. Ich habe es getan und frage mich, was die Bedeutung von Ausgabenachrichten ist:

[A@localhost tests]$ ls -ld /etc/*conf /usr/*conf > test1_6_conf.txt 2>&1 &

Enter steigt diese Zeile:

[1] 2533

was bedeutet das? Nach der anderen Eingabe werden weitere Meldungen angezeigt

[A@localhost tests]$
[1]+  Exit 2                  ls --color=auto -ld /etc/*conf /usr/*conf > test1_6_conf.txt 2>&1

Was bedeutet das? Was ist "Exit 2"?

Geben Sie ein Prüfergebnis ein - scheint alles in Ordnung zu sein.

[A@localhost tests]$
[A@localhost tests]$ ls -l test1_6_conf.txt
-rw-rw-r--. 1 A A 2641 Nov 22 14:19 test1_6_conf.txt
[A@localhost tests]$ 

Ich verwende CentOS 6.4, Gnome Terminal Emulator.

ALZ
quelle

Antworten:

18

Was bedeutet das? Was ist "Exit 2"?

Es ist der Exit-Status von ls. Siehe Mann für ls:

   Exit status:
       0      if OK,

       1      if minor problems (e.g., cannot access subdirectory),

       2      if serious trouble (e.g., cannot access command-line argument).

Ich denke, der Grund ist, dass Sie viele * conf-Dateien in /etcund keine * conf-Dateien in / usr haben. In der Tat ls -ld /usr/*conf;hätte der gleiche Effekt gehabt.

Wenn ich also auf meinem Computer lsnach einer vorhandenen Datei suche:

ls main.cpp; echo $?
main.cpp
0

Und für eine Datei, die nicht existiert:

ls main.cppp; echo $?
ls: cannot access main.cppp: No such file or directory
2

Oder als Hintergrundprozess für eine Datei, die nicht existiert:

>ls main.cppp &
[1] 26880
ls: cannot access main.cppp: No such file or directory
[1]+  Exit 2                  ls main.cppp

quelle
Ö! Vielen Dank. Jetzt habe ich diese ls /usr/*confRückkehr erkannt, 2da es keine Dateinamen gibt, die "conf" enthalten.
ALZ
2
@ALZ, beachten Sie, dass 2 zurückgegeben wird, da die aufgerufene Datei nicht gefunden werden kann /usr/*conf. Und bashübergibt ihm diesen Dateinamen, weil er keine Dateien finden kann, die diesem Muster entsprechen. Bessere Shells wie zshhätten einen "no match" -Fehler zurückgegeben und wären überhaupt nicht gelaufen ls.
Stéphane Chazelas
1

Dieser mittlere Befehl wurde mit einem anderen Beendigungsstatus als 0 (Erfolg) beendet.

Versuchen Sie, nicht (&) am Ende zu setzen, um zu sehen, was passiert.

Wenn dieser Befehl beim Ausführen viel Zeit in Anspruch nimmt, können Sie ihn überprüfen mit:

lnx #> jobs -l

Vitalie Ghelbert
quelle