Czasami po uruchomieniu poleceń nie wyświetla wyniku, więc nie jestem pewien, czy zadziałały, czy nie. Czy jest możliwe, aby wszystkie polecenia otrzymywały informacje zwrotne, jeśli zostały poprawnie uruchomione? Lub na samym minimum, aby wyświetlić informację zwrotną, którą uruchomili (poprawnie lub nie)
command-line
rajlego
źródło
źródło
cryptsetup
może domyślnie pominąć niektóre komunikaty o błędach. Dobrze mieć$?
w sobiePS1
. Następnym krokiem jest dodanie aktualnego czasu, aby zawsze znać czasy poleceń;)Odpowiedzi:
(Myślę, że skoro piszesz wewnątrz Zapytaj Ubuntu , możemy założyć, że mówisz o domyślnej powłoce, czyli Bash .)
Odpowiedź na pytanie przepełnienia stosu jest bardzo dobra. W skrypcie powłoki: wykonaj polecenia powłoki echa podczas ich wykonywania (nie jest to tylko rozwiązanie specyficzne dla Ubuntu).
To, co musisz zrobić, to użyć polecenia set, aby włączyć verbose lub xtrace.
daje listę z której obecne parametry są przełączane na lub off .
lub wersja długa:
włączy pełne słowo .
Myślę, że to, czego chcesz, to tak naprawdę xtrace. Spowoduje to nie tylko echo każdego uruchomionego polecenia, ale także rozszerzy parametry i zapewni więcej informacji zwrotnych. Więc jeśli zrobię coś tak głupiego jak pisanie „cześć” na terminalu, otrzymam echo tego, co wpisałem, a także raport / ślad tego, co powłoka zrobiła, aby spróbować wykonać polecenie „cześć” (patrz zrzut ekranu poniżej ):
Aby włączyć xtrace:
lub:
Aby wyłączyć te parametry, (przeciw intuicyjnie) wywołujesz te same polecenia, z wyjątkiem symbolu plus + zamiast myślnika lub symbolu minus, więc na przykład:
włączy gadatliwy OFF , podobnie:
włączy xtrace OFF .
Szczegółowy przewodnik po opcjach powłoki znajduje się w rozdziale 33. Opcje, Advanced Bash-Scripting Guide .
źródło
whoami >/dev/null
.Aby sprawdzić, czy niektóre polecenia działały poprawnie, możesz sprawdzić status powrotu podany przez
$?
poprzednie polecenie za pomocą:Status powrotu
0
oznacza, że polecenie zakończyło się pomyślnie, a niezerowe wyjście ( kod błędu ) oznacza, że napotkano pewne problemy lub wystąpił błąd, a kategoria może być znana z kodu błędu. Kody błędów systemu Linux / C są zdefiniowane w/usr/include/asm-generic/errno-base.h
i/usr/include/asm-generic/errno.h
.Również w bash
.bashrc
definiuje alias,alert
którego można użyć do powiadomienia o stanie ukończenia. Musisz dołączyć alias za pomocą polecenia lub zestawu poleceń w następujący sposób:Możesz dołączyć następujący wiersz kodu do swojego
~/.bashrc
pliku, aby wyświetlić status powrotu ostatniego wykonanego polecenia.(otwórz plik za
~/.bashrc
pomocą edytora tekstu i skopiuj powyższą linię, wklej go do pliku i zapisz. Uruchom nową instancję terminala, a powinieneś mieć ją w akcji. Lub zamiast tego możesz zdefiniować jakąś funkcję i użyć zPS1
podobnymi jak pokazano poniżej.)małe demo:
Po prostu
PS1
bawię się :) .. trochę więcej,(możesz zmodyfikować funkcję, aby była bardziej fantazyjna, coś takiego jak @gronostaj robi w swoim poście).
źródło
PS1
. Tego używam, z czerwonym numerem w przypadku błędów, nic więcej, jeśli ostatnie polecenie się powiedzie:\[\033[01;41;37m\]${?#0}\[\033[00;01;36m\] \u@\h:\w\[\033[00m\]\$
~/.bashrc
pliku źródłowego ?^_^
z sukcesu, a czerwonyx_x
z czegokolwiek innego.Możesz zmienić swój wiersz polecenia, aby wyświetlać zielony znak zaznaczenia, gdy poprzednie polecenie kończy się z 0, a czerwony X w przeciwnym razie. Arch Linux Wiki ma fajny fragment kodu do dodania do
bash.rc
:(Wyłączyłem aktualny kod błędu, ponieważ mi się nie podoba, jeśli chcesz zobaczyć dokładne kody po prostu usuń
#
z tego wiersza#PS1="$White\$? "
:)Oto jak to wygląda:
źródło
Tak , możliwe jest uzyskanie informacji zwrotnej dla każdej komendy wykonanej na terminalu. Działa na podstawie,
echo $?
która zwraca 0 dla pomyślnego zakończenia komendy i każdą inną wartość inną niż 0 dla niepowodzenia.Aby uzyskać informację o sukcesie lub niepowodzeniu, dodaj poniższy wiersz do
~/.bashrc
pliku.A następnie
~/.bashrc
plik źródłowy , aby działał.Wyjaśnienie:
Dla każdego polecenia wykonanego na terminalu
;if [[ $? == 0 ]]; then tput setaf 6 && echo SUCCESS; tput sgr0; else tput setaf 1 && echo FAILURE; tput sgr0; fi;
kod zostanie automatycznie powiązany z nim.Przykład:
źródło
bind 'RETURN: " && echo SUCCESS || echo FAILED \n"'
zrobi to samo, nie musisz[[ $? == 0 ]]
jawnie sprawdzać .