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
, Вы можете доказать, что это не имеет ничего общего с символической ссылкой, превратив файл в обычный файл (временно) и увидев то же поведение с обычным файлом.