Если вы попытаетесь
cd () {
echo "Improved CD !"
# Improvement one;
cd
# Improvement two;
# Do cool stuff...
}
cd
без command
, cd
вызовет функцию cd
, которая вызовет функцию cd
, которая вызовет функцию cd
, и так далее :оператор cd
внутри вызывает функцию cd
, а не встроенную функцию cd
-. Вы увидите «Улучшенный компакт-диск!» повторяется до тошноты в вашем терминале.
Окончательный результат зависит от оболочки :Zsh остановится («достигнут максимальный уровень вложенной функции» ), Bash аварийно завершает работу.
Поверь мне, я долго сомневался в этом. Теперь я помню это простыми словами.
Здесь fd
означает file descriptor
.
Во втором случае fd2
будет указывать на то, где когда-либо находится fd1
. И тогда fd2
укажет куда-то еще.
Для понимания считай так
fd1 --> stdout
2>&1, means fd2 --> stdout
then >some_file means fd1 --> some_file
Итак, fd2
не следует за fd1
, а следует за целью fd1
.