Почему при перенаправлении stdout и stderr в файл перенаправление stderr на stdout должно быть последним?

Если вы попытаетесь

cd () {
    echo "Improved CD !"
    # Improvement one;
    cd
    # Improvement two;
    # Do cool stuff...
}
cd

без command, cdвызовет функцию cd, которая вызовет функцию cd, которая вызовет функцию cd, и так далее :оператор cdвнутри вызывает функцию cd, а не встроенную функцию cd-. Вы увидите «Улучшенный компакт-диск!» повторяется до тошноты в вашем терминале.

Окончательный результат зависит от оболочки :Zsh остановится («достигнут максимальный уровень вложенной функции» ), Bash аварийно завершает работу.

0
27.01.2021, 09:50
1 ответ

Поверь мне, я долго сомневался в этом. Теперь я помню это простыми словами.

Здесь fdозначает file descriptor.

Во втором случае fd2будет указывать на то, где когда-либо находится fd1. И тогда fd2укажет куда-то еще.

Для понимания считай так

fd1 --> stdout
2>&1, means fd2 --> stdout
then >some_file means fd1 --> some_file

Итак, fd2не следует за fd1, а следует за целью fd1.

0
18.03.2021, 22:34

Теги

Похожие вопросы