#linux
#linux
Вопрос:
У меня есть следующий скрипт:
cd /home
touch $PF ; chown $NU.$NU $PF
su -p -s /bin/sh root -c "node"
Когда я запускаю ее, она выдает следующую ошибку:
sh: node: command not found
Но когда я запускаю ее из командной строки Linux, она завершается успешно и выдает мне командную строку node.
В чем может быть причина этого?
Комментарии:
1. другое
PATH
? Попробуйтеecho $PATH
перед выполнением команды.2. показать
ls -a /path/to/node
3. Вопрос здесь не по теме, попробуйте superuser.com чтобы получить ответ.
4. @mata
su -p
должен сохранять environment, в том числеPATH
, но я тоже настроен скептически.5. @mata хороший улов, это выглядело как
PATH
проблема. Вот почему я был настроен скептически. Рад, что это имеет смысл.
Ответ №1:
node
вероятно, не у root
пользователя $PATH
.
Я проверил su
документацию и заметил следующее:
-m, -p, --preserve-environment
Preserve the current environment, except for:
$PATH
reset according to the /etc/login.defs options ENV_PATH or ENV_SUPATH (see below);
[...]
ENV_PATH (string)
If set, it will be used to define the PATH environment variable when a regular user login. The value can be
preceded by PATH=, or a colon separated list of paths (for example /bin:/usr/bin). The default value is
PATH=/bin:/usr/bin.
ENV_SUPATH (string)
If set, it will be used to define the PATH environment variable when the superuser login. The value can be
preceded by PATH=, or a colon separated list of paths (for example /sbin:/bin:/usr/sbin:/usr/bin). The default
value is PATH=/sbin:/bin:/usr/sbin:/usr/bin.
Таким образом, хотя у вас может быть node
в текущем $PATH
, это может быть не в root
‘s $PATH
.
Как уже упоминали некоторые комментаторы, вы можете попробовать указать абсолютное значение $PATH
для node
:
su -p -s /bin/sh root -c "/path/to/node"
Если вы можете вызвать ее node
от вашего текущего пользователя, попробуйте which node
определить полный путь к исполняемому файлу.
Вы также можете попробовать повторить свой $PATH
.
su -p -s /bin/sh root -c 'echo $PATH'
Комментарии:
1. Хороший улов. Это относительно новое изменение,
man su
происходящее между coreutil 8.9 и переходом к util-linux 2.22.