Если вы используете "!Параметр env_reset » для его отмены и« secure_path »не задан в файле вашего sudoer, тогда параметры" env_check "и« env_delete »могут убрать PATH из освобождения от сброса (т.е. они функционируют как записи черного списка).
Более вероятной причиной может быть то, что система /etc /bashrc или ваш собственный .bashrc сбрасывает PATH к некоторому стандартному значению (и не добавляет его к существующему пути, если это необходимо).
В моем собственном "системном" bashrc (который я храню в /etc /local и вызывается после системного bashrc) я стараюсь не перезаписывать переданный путь некоторыми функциями, определенными при входе в систему:
# used in _path_op below
function empty {
[[ $# -lt 1 ]] && return -1
[[ -f $1 && ! -s $1 ]] && return 0
[[ -d $1 ]] && {
local -a entries=("$1"/*)
[[ ${entries[0]} == "$1/*" ]] && return 0
}
return 1
}
function _path_has_subpath { [[ ${!1} =~ (:$2:|^$2:|:$2$) ]] ; }
function _path_op {
(($#<3)) && return 1 # 3rd arg is path to <X>pend
local fmt="$1" pathname="$2"; shift 2
while (($#)); do
[[ -d $1 ]] && ! empty "$1" && {
_path_has_subpath "$pathname" "$1" ||
eval "export $(set $pathname $1; eval "echo $fmt")"
}
shift;
done
}
# called with name of path (ex. 'PATH' & one or more sub paths
# each of these prepend an "assign FORMAT" to the passed-in PATHVAR + pathcomp
function _path_append { _path_op '$1=\"${!1}:$2\"' "$@" ; }
function _path_prepend { _path_op '$1=\"$2:${!1}\"' "$@" ; }
typeset -x _path_append _path_prepend _path_has_subpath _path_op
Я звоню им через:
_path_append PATH /opt/kde3/bin /usr/local/bin "$PATH_HOME/bin"
_path_prepend PATH "$PATH_HOME/bin/lib"
Конечно, если проблема в bashrc вашего дистрибутива, вы можете сообщить об ошибке ... ;-)
(это предполагает, что вы не вызываете sudo с "-i", который говорит, что нужно начинать с новой среды).
FWIW, в начале и в конце моего различного профиля и файлов bashrc и env и их подфайлов ... И в версиях моего дистрибутива (должны быть прочитаны после обновления). Я помещаю отладочные строфы, которые обычно неактивны. В начале:
[[ ${DEBUG:-} || -O /tmp/debug_local ]] && {
echo "(${#BASH_LINENO[@]:-""})entering $BASH_SOURCE ..." >&2;
[[ -O /tmp/debug_local ]] && source /tmp/debug_local ; }
и конец:
[[ ${DEBUG:-} || -O /tmp/debug_local ]] && {
echo "(${#BASH_LINENO[@]:-""})exiting $BASH_SOURCE ..." >&2;
Затем, если мне понадобится отладить проблему, подобную этой, я могу коснуться /tmp /debug_local, и она создаст шумные входы в систему для всех пользователей в моей системе (которая обычно есть только у меня в системе, на которой у меня это включено).
Также полезно, если вы активируете «-x», это меняет вашу линию PS4:
#export PS4='>>\
[$(__age)]${BASH_SOURCE:+${BASH_SOURCE[0]}}#i\
${LINENO}${FUNCNAME:+(${FUNCNAME[0]})}> '
(Все вышеперечисленное - одна строка, разделенная обратной косой чертой - это тоже комментарий, то есть некомментированный для использования)