bash, похоже, игнорирует BASH_ENV при доступе по символической ссылке - PullRequest
2 голосов
/ 27 января 2012

Я работаю в среде 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 ]

6 голосов
/ 27 января 2012

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

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

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

3 голосов
/ 27 января 2012

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

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

...