В Ubuntu Ясный Lynx я пытаюсь сделать
su -l user -c "foo.sh args"
где foo.sh
исполняемый сценарий удара на PATH
набор ~user/.bashrc
. К сожалению, это перестало работать, потому что это не может найти foo.sh
. Если я su -l user
и вручную введите foo.sh args
в командной строке это хорошо работает. В увеличении ПУТИ выполняют ~user/.bashrc
и, кажется, работает действительно ли я su
с -l
в интерактивном режиме, но это, кажется, не работает, когда я указываю команду.
Какая-либо идея, почему это, и как я могу обойти это?
Это запускает оболочку как неинтерактивную оболочку входа в систему, таким образом, это обрабатывает ~/.profile
и нет ~/.bashrc
. Можно установить Ваш PATH
в том файле или делают это в общем файле, который они оба получают. Некоторые люди/дистрибутивы устанавливают один файл запуска для определения источника другого, но я не рекомендую это.
От man bash
:
Когда удар вызывается как интерактивная оболочка входа в систему, или как неинтерактивная оболочка с - опция входа в систему, он сначала читает и выполняет com ‐ NAND из файла/etc/profile, если тот файл существует. После чтения того файла это ищет ~/.bash_profile, ~/.bash_login и ~/.profile, в том порядке, и читает и выполняет команды от первой, которая существует и читаема. - noprofile опция может использоваться, когда оболочка запускается для запрещения этого поведения.