Скрипт не будет работать с правильными переменными среды при запуске с su - PullRequest
0 голосов
/ 06 мая 2019

У меня есть сценарий, который я написал, который вызывает другой сценарий, но не указывает, где находится этот сценарий, потому что его местоположение уже должно быть в переменной PATH пользователя.По умолчанию пользователь запускается в ksh, и я настроил файл .kshrc, чтобы определить все необходимые каталоги в переменной PATH.Если я запускаю его от имени пользователя, то он работает нормально, но если я пытаюсь запустить его с помощью команды su, то это дает сбой.Например, это не сработает

su - user1 -c "myscript.sh"

У меня сложилось впечатление, что при использовании дефиса с командой su он будет загружать среду этих пользователей.Это не правильно?Есть ли способ обойти это, затем указать полный путь к другому скрипту, который я вызываю?

Ответы [ 3 ]

1 голос
/ 08 мая 2019

У меня сложилось впечатление, что при использовании дефиса с командой su он загружает среду этих пользователей.Это не правильно?

Не совсем.Это заставляет оболочку быть оболочкой входа в систему.Это означает, что перед именем команды оболочки стоит тире.Если вы наберете man ksh и перейдете к разделу «Вызов», вы увидите, что правила, для которых «точечные» файлы читаются при запуске оболочки, неясны.Обратите внимание, что по умолчанию ~ / .kshrc читается только для интерактивных оболочек.Поскольку вы выполняете скрипт, он не будет интерактивной оболочкой.Вы можете принудительно прочитать .kshrc, используя флаг -E.Но обратите внимание, что в общем случае вам не следует устанавливать переменные env, например PATH, в вашем файле .kshrc.

0 голосов
/ 07 мая 2019

Полагаю, вы хотите запустить скрипт в среде входа пользователя user1. Предполагая, что оболочкой входа user1 является bash, вы можете сделать

su - user1 -lc myscrip.sh

, который передает параметр -l в bash: см. Файлы запуска Bash , чтобы узнать, что это значит.

0 голосов
/ 06 мая 2019

Вы можете сделать:

su - user1 -c "bash myscript.sh"

Если это не работает:

su - user1 -c "bash /full-path-to-the-file-from-root/myscript.sh"

...