Jak Mogę wyłączyć wszystkie wyjścia z polecenia za pomocą Bash?

Mam skrypt Basha, który uruchamia program z parametrami. Ten program wyświetla pewien status (robiąc to, robiąc tamto...). Nie ma opcji, aby ten program był cichy. Jak mogę uniemożliwić wyświetlanie czegokolwiek przez skrypt?

Szukam czegoś takiego jak Windows ' "echo off" .

Author: Peter Mortensen, 2009-03-05

7 answers

Następujące wyjście wysyła standardowe wyjście do urządzenia null (bit bucket).

scriptname >/dev/null

I jeśli chcesz również wysyłać tam komunikaty o błędach, użyj jednego z nich (pierwszy może nie działać we wszystkich powłokach):

scriptname &>/dev/null
scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null

I, jeśli chcesz nagrywać wiadomości, ale ich nie widzisz, zastąp /dev/null rzeczywistym plikiem, takim jak:

scriptname &>scriptname.out

Dla kompletności, pod Windows cmd.exe (gdzie" nul "jest odpowiednikiem" / dev / null"), to:

scriptname >nul 2>nul
 553
Author: andynormancx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-04 13:35:47

Coś jak

script > /dev/null 2>&1

Uniemożliwi to standardowe wyjście i , przekierowując je do /dev/null.

 49
Author: Diego Sevilla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-05 23:41:10

Try

: $(yourcommand)

: to skrót od "nic nie robić".

$() to tylko twój rozkaz.

 16
Author: V0idSt4r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-23 01:53:25

Alternatywą, która może pasować w niektórych sytuacjach, jest przypisanie wyniku polecenia do zmiennej:

$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1

Ponieważ Bash i inne interpretery wiersza poleceń POSIX nie uznają przypisania zmiennych za polecenie, Kod zwracany przez to polecenie jest przestrzegany.

Uwaga: przypisanie za pomocą słowa kluczowego typeset lub declare jest traktowane jako polecenie, więc obliczony kod powrotu w przypadku jest przypisaniem, a nie poleceniem wykonanym w "sub-shell": {]}

$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
 15
Author: semente,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-24 18:08:20

Podobnie jak andynormancx' post , Użyj tego (jeśli pracujesz w środowisku uniksowym):

scriptname > /dev/null

Lub możesz użyć tego (jeśli pracujesz w środowisku Windows):

scriptname > nul
 6
Author: Lucas Gabriel Sánchez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-04 14:11:59

Spójrz na ten przykład z Projekt dokumentacji Linuksa:

3.6 przykład: plik stderr i stdout 2

To umieści każde wyjście programu w pliku. Jest to odpowiednie czasami dla wpisów cron, jeśli chcesz, aby polecenie przeszło w absolutnej ciszy.

     rm -f $(find / -name core) &> /dev/null 

To powiedziawszy, możesz użyć tego prostego przekierowania:

/path/to/command &>/dev/null
 4
Author: ivanleoncz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-19 19:59:07

W Twoim skrypcie możesz dodać następujące wiersze, o których wiesz, że dadzą wynik:

some_code 2>>/dev/null

Albo możesz też spróbować

some_code >>/dev/null
 1
Author: Rohan Dsouza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-21 20:01:38