bash, похоже, игнорирует BASH_ENV при доступе по символической ссылке

Я работаю в среде UNIX, где /bin был настроен так:

-rwxr-xr-x  1 root root 617144 Nov 19  2009 bash
lrwxrwxrwx  1 root root      4 Nov 23  2010 sh -> bash

В моем окружении я установил $BASH_ENV указать на мой местный.bashrc:

env | grep BASH
BASH_ENV=/home/users/atomicpirate/.bashrc

Кроме того, .bashrc имеет в качестве первой строки echo BASHRC READ,

Я ожидал бы, что / bin / sh и / bin / bash будут вести себя точно так же с этой установкой... но они этого не делают:

/bin/bash -c 'echo $BASH_ENV'
BASHRC READ
/home/users/atomicpirate/.bashrc

/bin/sh -c 'echo $BASH_ENV'
/home/users/atomicpirate/.bashrc

Во втором случае.bashrc НЕ читается. Есть идеи, почему это так? Кажется, что символическая ссылка нарушает ожидаемое поведение $BASH_ENV.

2 ответа

Решение

Цитирование bash manpage:

Если bash вызывается с именем sh, он пытается максимально близко имитировать поведение при запуске исторических версий sh, при этом также соответствует стандарту POSIX.

Обратите внимание, что при запуске в качестве интерактивной оболочки, современные sh использования $ENV аналогично тому, как bash использования $BASH_ENV, Это поведение также имитируется Bash.

Когда bash вызывается как sh, он намеренно ведет себя по-разному, и отключает ряд bash расширения.

Похоже, одно из изменений заключается в том, что он больше не читает файл, продиктованный $BASH_ENV, Вы можете доказать, что это не имеет ничего общего с символической ссылкой, превратив файл в обычный файл (временно) и увидев то же поведение с обычным файлом.

Другие вопросы по тегам