Что происходит со средой, когда Вы работаете “su-c”?

Что происходит со средой, когда Вы работаете "su-c"?

Причина, которую я спрашиваю, это таинственное поведение:

bash$ which firefox
/usr/local/bin/firefox
bash$ su - user -c "echo $PATH"
bin:/usr/bin:/sbin:/usr/sbin:/opt/java/bin:/usr/local/bin:... 
bash$ su - user -c "firefox ..."
-bash: firefox: command not found

Какие-либо идеи?

4
задан 25.09.2010, 18:15

2 ответа

То, что Вы видите, является фактом это $PATH расширен в первой пользовательской оболочке во время обработки аргумента, перед su(1) управляйте выполнениями, таким образом, похоже, что это всегда делает. Если Вы используете твердые кавычки ('echo $PATH') необходимо видеть что-то другое или просто сделать \$.

Это сохранит $PATH синтаксис до окончания su(1) выполнения команды. В то время как это обычно не играет со средой, это действительно запускает новую оболочку, и таким образом, необходимо проверить на PATH= строки в различной оболочке запускают сценарии.

Ваш su(1) имеет a -c опция, таким образом, Вы, казалось бы, были бы на Linux. На Mac или BSD Вы получили бы упрощенный PATH вместо входа в систему PATH но у Вас все еще было бы то же, "когда я разворачивал ПУТЬ?" проблема.

3
ответ дан 07.12.2019, 19:24

Когда su - или su -l используется, это эмулирует сессию входа в систему, которая включает сброс среды к чистому состоянию.

На дуге Linux, su - использует строку hardcoded /usr/ucb:/bin:/usr/bin:/etc как новое $PATH. В других системах это могло бы читать ENV_SUPATH от /etc/login.defs, или полагайтесь на PAM для установки среды.

su ... "echo $PATH" находится, потому что $PATH часть расширена Вашей текущей оболочкой, путем прежде su запускается. Использовать su ... 'echo $PATH' вместо этого (отмечают одинарные кавычки), или su - -c env (печатает полную среду).

7
ответ дан 07.12.2019, 19:24

Теги

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