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" .
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
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
.
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.
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
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
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
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
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