С помощью:
Linux nomemory 2.6.32-24-generic #43-Ubuntu SMP Thu Sep 16 14:17:33 UTC 2010 i686 GNU/Linux
У меня есть папка в моем $HOME
называется ~/.scriptfarm/scripts
где я храню некоторые свои собственные скрипты.
nomemory@nomemory:~$ ls -l /home/nomemory/.scriptfarm/script
total 20
-rwxr-xr-x 1 nomemory nomemory 10 2010-09-21 01:31 aaa
-rwxr-xr-x 1 nomemory nomemory 31 2010-09-21 00:47 pt.chc
-rwxr-xr-x 1 nomemory nomemory 35 2010-09-21 00:47 pt.int
-rwxr-xr-x 1 nomemory nomemory 34 2010-09-21 00:47 pt.rem
-rwxr-xr-x 1 nomemory nomemory 54 2010-09-21 00:47 pt.up
Проблема в том, что в Ubuntu ни один из скриптов не работает с префиксом sudo
. В Arch, где скрипты работают, поведение другое.
Позвольте мне привести Вам пример (aaa
скрипт типа foobar):
nomemory@nomemory:~$ aaa
aaa
nomemory@nomemory:~$ sudo aaa
sudo: aaa: command not found
nomemory@nomemory:~$
И если эхо $ PATH:
nomemory@nomemory:~$ sudo echo $PATH
/home/nomemory/.scriptfarm/script:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Вы знаете, почему мои скрипты не работают, если я ставлю перед ними префикс sudo
. Какие-нибудь решения?
Позже отредактируйте: Обходной путь, который я нашел, заключался в добавлении псевдонима для sudo: sudo env PATH=$PATH $@
.
Ваш тест вводит в заблуждение, потому что PATH раскрывается перед вызовом sudo. Вместо этого сделайте:
sudo sh -c 'echo $PATH'
и вы увидите, что есть другой путь.
Включать /home/nomemory/.scriptfarm/scripts
в вашей общесистемной PATH вы можете изменить /etc/profile
:
PATH="$PATH:/home/nomemory/.scriptfarm/scripts"
Похоже, проблема в том, что Ubuntu компилирует sudo с SECURE_PATH
вариант, что делает невозможным передачу среды PATH. Вы можете увидеть это, указав -V
вариант при запуске от имени root. Таким образом, команда sudo sudo -V
выводит список значений по умолчанию. Похоже, единственный обходной путь - перекомпилировать sudo.
В Ubuntu (по крайней мере, 10.04) есть опция в sudoers
файл для сброса среды.
Defaults env_reset
Вы можете удалить его или использовать SETENV для каждого пользователя, чтобы сохранить старую среду.
На странице руководства говорится о env_reset
:
Если установлено, sudo сбросит среду, чтобы она содержала только LOGNAME, SHELL, USER, USERNAME и переменные SUDO_ *. Затем добавляются любые переменные в среде вызывающего абонента, соответствующие спискам env_keep и env_check. Содержимое по умолчанию списков env_keep и env_check отображается, когда sudo запускается от root с параметром -V. Если установлена опция secure_path, ее значение будет использоваться для переменной среды PATH. По умолчанию этот флаг установлен.
Вы могли бы использовать which aaa
чтобы узнать, где находится aaa, затем запустите его оттуда. В противном случае вы сможете
sudo 'export PATH='$PATH'; aaa'
Замена nomemory
для имени вашей учетной записи эти файлы находятся в:
sudo ~nomemory/.scriptfarm/scripts/aaa
Абсолютные пути = ♥