Mam ćwiczenie, aby umieścić w pliku pewne dane (* conf z niektórych katalogów) i muszę to zrobić w tle. Zrobiłem to i zastanawiam się, jakie jest znaczenie komunikatów wyjściowych:

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

Wpisz podnosi ten wiersz:

[1] 2533 

co to znaczy? Po drugim Enter pojawiają się kolejne komunikaty.

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

Co to oznacza? Co to jest „Exit 2”?

Wpisz wyniki sprawdzenia – wydaje się, że wszystko w porządku.

[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]$ 

Używam CentOS 6.4, Emulator terminala GNOME.

Odpowiedź

Co to oznacza? Co to jest „Wyjście 2”?

To jest kod zakończenia ls. Zobacz man for 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). 

Myślę, że powodem jest to, że masz dużo * conf plików w /etc i żadnych plików * conf w / usr. W rzeczywistości ls -ld /usr/*conf; miałoby ten sam efekt.

Więc jeśli zrobię na moim komputerze ls dla istniejącego file:

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

A dla pliku, który nie istnieje:

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

Lub jako proces w tle dla pliku, który nie istnieje:

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

Komentarze

  • O! Dzięki. Teraz ' zdałem sobie sprawę, że ls /usr/*conf zwraca 2, ponieważ nie ma żadnych nazw plików zawierających " conf ".
  • @ALZ, zwróć uwagę, że zwraca 2, ponieważ nie może znaleźć pliku o nazwie . A bash przekazuje tę nazwę pliku, ponieważ może ' znaleźć pliki pasujące do tego wzorca. Lepsze powłoki, takie jak zsh, zwróciłyby błąd " bez dopasowania " i nie zostałyby uruchomione ls w ogóle.

Odpowiedź

To znaczy, że polecenie zakończyło się ze statusem wyjścia innym niż 0 (powodzenie).

Staraj się nie umieszczać (&) na końcu , aby zobaczyć, co się stanie.

Jeśli wykonanie tego polecenia zajmuje dużo czasu, możesz to sprawdzić za pomocą:

lnx #> jobs -l

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *