В основном я пытаюсь понять разницу между этими командами:
cat <<< yolo | tee f.txt
echo yolo | tee t.txt
И этими командами:
cat <<< yolo > >(tee f.txt)
echo yolo > >(tee t.txt)
Первые две команды имеют одинаковый результат: "yolo" выводится на печать, и после этого терминал возвращает управление, что я и ожидал.
[user@localhost ~] $ cat <<< yolo | tee f.txt </p>
yolo
[user@localhost ~] $ echo yolo | tee t.txt
yolo
Но с заменой процесса происходит нечто странное с echo
.
[user@localhost ~] $ cat <<< yolo>> (tee f.txt)
yolo
[user@localhost ~] $ echo yolo>> (tee t.txt)
[user@localhost ~] $ yolo
Терминал возвращает управление до вывода текста на печать. Почему я получаю управление раньше в этом случае?
Это должно иметь какое-то отношение к тому, как открываются процессы и как файловые дескрипторы передаются между процессами, но я вроде достиг пределы моих знаний.
Если я передам это чему-либо еще, все вернется к норме, например, echo yolo > >(tee t.txt) | cat
.
Что еще более странно, это то, что xargs 'in echo
работает ну:
[user@localhost ~] $ xargs echo <<< yolo>> (tee t.txt)
yolo
Но вы Можно сказать, что xargs
является главной программой здесь, а не echo
.
И если я использую подстановку процесса ввода с cat
, я получаю смешанные результаты:
cat < <(echo yolo) > >(tee t.txt)
Иногда мне это дает:
[user@localhost ~] $ cat <<(echo yolo)>> (tee t.txt)
[user@localhost ~] $ yolo
И иногда это:
[user@localhost ~] $ cat <<(echo yolo)>> (tee t.txt)
yolo
Так что я думаю, что это может быть что-то делать с как быстро система выполняет команду, что делает ее непредсказуемой.
Означает ли это, что подстановка выходного процесса (например, tee
в этом примере) выполняется в фоновом режиме?