Или оставьте поле ввода пароля пустым. Если вы используете wpa_gui, вам будет предложено ввести пароль. (Я делаю это с учетными записями eduroam, так как мой пароль такой же, как и мой логин * nix)
Кажется --output-error=warn
делает это.
head -c10G /dev/zero |
tee --output-error=warn >(head -c10M | wc -c) >(head -c100M | wc -c) >(head -c1000M | wc -c)
К сожалению, он также спамит предупреждениями на stderr и не завершает работу, если не может писать ни в один из них.
Вы должны использовать tee --output-error=exit-nopipe
. Это проигнорирует сигнал SIGPIPE
и ошибку записи EPIPE
, но все равно умрет при любых других ошибках.
tee --output-error=exit-nopipe
, как и вариант warn
из вашего ответа, завершается, когда он не может записать хотя бы один из своих выходов; но он считает стандартный вывод одним из них.
В ваших примерах есть ошибки, потому что они просто сбрасывают вывод head -c10G /dev/zero | tee...
на ваш терминал (, который вы не видите, потому что нулевой байт "невидим" ); и именно поэтому tee
в вашем ответе не выходит из :, потому что он все еще будет записываться в стандартный вывод после выхода из процесса замены >(...)
.
Для систем без GNU tee возможным обходным решением является добавление cat >/dev/null
к командам, которым передается вывод tee
; но вы не можете сделать это со всеми ими; вам придется выбрать «главный» вывод, который приведет к выходу tee
, если запись на него не удастся. Пример:
$ dd if=/dev/zero |
tee >(dd of=/dev/null count=200; cat >/dev/null) >(dd of=/dev/null count=700; cat >/dev/null) |
dd of=/dev/null count=1000
$ dd if=/dev/zero |
tee >(dd of=/dev/null count=1000) >(dd of=/dev/null count=700; cat >/dev/null) |
{ dd of=/dev/null count=200; cat >/dev/null; }
Оба должны записывать 200, 700 и 1000 блоков соответственно.
Бывает, что любой канал, который блокирует, отправит SIGPIPE на tee
и остановит его:
$ head -c10G /dev/zero | tee >(head -c10 | wc -c) >(head -c1M | wc -c)
10
65536
Команда tee
получает SIGPIPE из первого канала и вызывает выход всех дочерних элементов.
Вам нужно будет расширить каждую трубу, чтобы не было ограничений:
$ head -c10G /dev/zero | tee >({ head -c10 | wc -c; }; cat >/dev/null ) >(head -c1M | wc -c)
10
1048576
для всех приведенных вами случаев:
$ head -c10G /dev/zero | tee >({ head -c1M | wc -c;}; cat >/dev/null) >({ head -c10M | wc -c; }; cat >/dev/null) >( { head -c100M | wc -c; }; cat>/dev/null) >(head -c1000M | wc -c)
1048576
10485760
104857600
1048576000
Но проще сообщить tee
, чтобы избежать выхода из-за ошибок конвейера с опцией -p
:
$ head -c10M /dev/zero | tee -p >(head -c10 | wc -c) >(head -c100 | wc -c) >(head -c1000| wc -c) >(head -c1M | wc -c)
100
1000
10
1048576
Что может печатать не по порядку.