4

В 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 в интерактивном режиме , но он не появляется на работе , когда я указать команду.

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

1 ответ1

2

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

От man bash:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .