Думаю, я придумал, как изменить ваш опыт , чтобы превратить его во что-то, что другие люди смогут воспроизвести:
$ (echo hello; sleep 1; echo world) | tee >(cat) hello hello … and, after a brief delay, world world $ echo "$?" 0 $ (echo hello; sleep 1; echo world) | tee >(echo yo) yo hello $ echo "$?" 141
Как вы, надеюсь, понимаете,
> ( команда )
создает канал
для процесса, выполняющего команду
.
Стандартный ввод команды
связан с именем пути
, что и другие команды в командной строке (в данном случае tee
) {{1} } можно открыть и написать в. Когда команда
имеет значение cat
,
процесс сидит там и читает из стандартного ввода, пока не получит EOF.
В этом случае tee
без проблем
записывает все данные, которые он читает со своего стандартного ввода, в канал.
Но когда команда
имеет значение echoyo
,
процесс записывает yo
в стандартный вывод и немедленно завершает работу.
Это вызывает проблему для tee
;
когда он пишет в канал без процесса на другом конце,
он получает сигнал SIGPIPE.
Очевидно, версия tee
для OS X сначала записывает в файл (ы) в командной строке, а затем в стандартный вывод.
Итак, в вашем примере ( echo hi | tee> (echo yo)
),
tee
получает отказ канала при самой первой записи.
В то время как версия tee
в Linux и Cygwin
сначала записывает в stdout ,
так что удается записать привет
на экран, прежде чем он умрет.
В моем расширенном примере tee
умирает, когда записывает hello
в канал,
, поэтому у него нет возможности читать и писать мир
.
powertop необходимо откалибровать на мобильных устройствах, в частности, на процессоре Intel i5 -5300U .