2016-07-06 4 views
2

Я столкнулся с приведенной ниже строкой кода в файле сценария оболочки.Что означает cd "some path"> & - означает?

cd "some path" >&- 

Может ли кто-нибудь помочь найти смысл?

+0

'man bash' поиск дублирующих дескрипторов файлов и дескрипторов файловых файлов – xxfelixxx

+0

Интересно, что справочная страница bash (по крайней мере, в моей версии), похоже, не определяет смысл этой конструкции, но AFIK означает, что stdout закрыт для этой команды. Вы можете попробовать его с помощью 'echo xxxx> &-'; bash будет жаловаться на сообщение об ошибке, потому что' echo' хочет записать в stdout, и этот дескриптор файла закрыт. Однако 'cd' не записывает в stdout, и если это произойдет, вы получите сообщение об ошибке, так что я не совсем понимаю причину этой конструкции. – user1934428

+1

(Just FYI): ** 'cd' не записывается в' stdout' ** Это ** NOT ** true. попробуйте это: 'cd ~; CDPATH = /; cd usr> & - 'Если' cd' проходит через пути 'CDPATH', каталог назначения записывается в' stdout'. Этот механизм CDPATH обычно не используется, но это стоит отметить. – anishsane

ответ

2

stdout закрыт. См. Redirections (Дублирование дескрипторов файлов). Это не имеет никакого смысла в вашем примере, потому что cd не записывает stdout в любом случае.

+2

Кроме того, я бы не предложил закрыть 'stdout' /' stderr'. Если процесс пытается записать эти дескрипторы файлов (например, 'ls> & -'), это даст вам такие ошибки, как 'ls: write error: Bad file descriptor'. Я предпочел бы рекомендовать перенаправить эти 2 FD на '/ dev/null' – anishsane

+3

**' cd' в любом случае не записывается в 'stdout'. ** Это ** NOT ** true. попробуйте это: 'cd ~; CDPATH = /; cd usr> & - 'Если' cd' проходит через пути 'CDPATH', то каталог назначения записывается в' stdout'. Этот механизм CDPATH обычно не используется, но это стоит отметить. – anishsane