Я работаю в среде UNIX, где /bin
был настроен так:Баша, кажется, игнорирует BASH_ENV при доступе через линк
-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/bash -c 'echo $BASH_ENV'
BASHRC READ
/home/users/atomicpirate/.bashrc
/bin/sh -c 'echo $BASH_ENV'
/home/users/atomicpirate/.bashrc
Во втором случае, .bashrc не читается , Любая идея, почему это будет так? Похоже, что символическая ссылка нарушает ожидаемое поведение $ BASH_ENV.
Это интересный бит о '$ ENV', я не знал, что' sh' имеет аналогичную переменную окружения '' BASH_ENV' bash''. Благодаря! – atomicpirate
В этом случае 'sh' использует только' $ ENV' для интерактивных оболочек, тогда как bash использует '$ BASH_ENV' для интерактивных и неинтерактивных оболочек. Таким образом, в вышеприведенном случае использование '$ ENV' не изменило бы результат. Тем не менее, хорошо знать об этом. – atomicpirate
Спасибо, что указали это. Я обновил ответ. Обратите внимание, что поведение 'sh' значительно изменилось со временем. Вот выдержка из man-страницы FreeBSD sh: «В отличие от старых версий sh, сценарий ENV генерируется только при вызове интерактивных оболочек, что закрывает хорошо известное, а иногда и легко доступное отверстие безопасности, связанное с плохо продуманными сценариями ENV». –