Mam program, który wyprowadza na standardowe wyjście i chciałbym wyciszyć te dane wyjściowe w skrypcie Bash podczas przesyłania do pliku.
Na przykład uruchomienie programu zwróci:
% myprogram
% WELCOME TO MY PROGRAM
% Done.
Chcę, aby następujący skrypt nie wyświetlał niczego na terminalu:
#!/bin/bash
myprogram > sample.s
Odpowiedzi:
Jeśli wyprowadza również na stderr, będziesz chciał to wyciszyć. Możesz to zrobić, przekierowując deskryptor pliku 2:
źródło
&>
jest dużo starszy niż bash 4.&>
wprowadzenie? : o>>&
został wprowadzony w 4.0. Nie ma wzmianki o,&>
ale ZMIANY powracają tylko do 2.0, więc myślę, że oznacza to, że było już w 1.x.git blame
naredir.c
punkty do 1998 zobowiązać do najstarszego wystąpienia jeszcze w bieżącym kodem.Przekieruj stderr na stdout
To przekieruje stderr (który jest deskryptorem 2) do deskryptora pliku 1, który jest standardowym wyjściem.
Przekieruj standardowe wyjście do pliku
Teraz, wykonując to, przekierowujesz standardowe wyjście do pliku
sample.s
Przekieruj stderr i stdout do pliku
Połączenie tych dwóch poleceń spowoduje przekierowanie zarówno stderr, jak i stdout do sample.s
Przekieruj stderr i stdout do / dev / null
Przekieruj do,
/dev/null
jeśli chcesz całkowicie wyciszyć swoją aplikację.źródło
myprogram >/dev/null 2>&1
(zwróć uwagę na klin przed/dev/null
i kolejność przekierowań).myprogram &>/dev/null
wystarczy?Wszystkie dane wyjściowe:
Przenośny:
Przenośny:
Nowszy bash (nie przenośny):
źródło
-
i&>
jest nieprzenośnym rozszerzeniem powłoki Bourne.echo moo 1>&-
generuje błąd, ponieważ deskryptor pliku 1 jest zamknięty:-bash: echo: write error: Bad file descriptor
Jeśli chcesz, aby STDOUT i STDERR [wszystko], to najprostszym sposobem jest:
następnie uruchom go jak
./script
, a nie dostaniesz żadnego wyjścia na swój terminal. :)„> &” oznacza STDERR i STDOUT.
&
również działa w ten sam sposób z rurą:./script |& sed
że wyśle wszystko sedźródło
a 2>&1 | b 2>&1 | c
Jeśli nadal masz trudności ze znalezieniem odpowiedzi, szczególnie jeśli utworzyłeś plik do wyjścia, i wolisz jasną alternatywę:
echo "hi" | grep "use this hack to hide the oputut :) "
źródło
Spróbuj z:
aby nie uzyskać żadnego wyniku
źródło
Uwaga: ta odpowiedź jest związana z pytaniem „Jak wyłączyć echo podczas wykonywania skryptu powłoki Linux”, które z kolei zostało oznaczone jako zduplikowane do tego.
Aby faktycznie wyłączyć echo, polecenie brzmi:
(jest to na przykład; gdy chcesz wprowadzić hasło i nie chcesz, aby było czytelne. Pamiętaj, aby włączyć echo na końcu skryptu, w przeciwnym razie osoba uruchamiająca skrypt nie zobaczy, co on / ona pisze od tego momentu. Aby włączyć echo podczas wykonywania:
źródło
Przydatne w skryptach:
Pobierz tylko STDERR w pliku, ukrywając wszystkie STDOUT, nawet jeśli program do ukrycia w ogóle nie istnieje (nigdy nie zawiesza skryptu nadrzędnego), to samo działało:
Całkowicie odłącz i ucisz wszystko, nawet zabicie skryptu nadrzędnego nie zostanie przerwane
./prog
:źródło
Do wyjścia tylko w przypadku błędu :
źródło