Проблемы с путём bash при использовании 'su'

1151
Thuktun

В Ubuntu Lucid Lynx я пытаюсь сделать

su -l user -c "foo.sh args" 

где foo.shисполняемый скрипт bash на PATHмножестве в ~user/.bashrc. К сожалению, это не удается, потому что он не может найти foo.sh. Если я su -l userи вручную набираю foo.sh argsв командной строке, все работает нормально. PATH увеличение делается ~user/.bashrcи, кажется, работает ли или нет, я suс в -lинтерактивном режиме, но он не появляется на работе, когда я указать команду.

Любая идея, почему это так, и как я могу обойти это?

4

1 ответ на вопрос

2
Dennis Williamson

Она запускает оболочку как неинтерактивную оболочку входа в систему, поэтому она обрабатывает ~/.profileи не обрабатывает ~/.bashrc. Вы можете установить свой PATHв этом файле или сделать это в общем файле, который они оба источник. Некоторые люди / дистрибутивы устанавливают один файл запуска, чтобы получить другой, но я не рекомендую это.

От man bash:

Когда bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с параметром --login, она сначала читает и выполняет команды из файла / etc / profile, если этот файл существует. После прочтения этого файла он ищет ~ / .bash_profile, ~ / .bash_login и ~ / .profile в указанном порядке, а также читает и выполняет команды из первой, которая существует и доступна для чтения. Опция --noprofile может использоваться, когда оболочка запущена, чтобы запретить это поведение.

Похожие вопросы