Как надежно добавить или добавить в PATH для пользователя - PullRequest
2 голосов
/ 12 июня 2019

.bashrc, .profile и .bash_profile.Я знаю, что они используются в разных ситуациях.

Я хочу добавить ~ / bin к PATH всегда , например, независимо от того, является ли это интерактивным сеансом.Я хочу, чтобы это работало также, когда кто-то судил меня.

Как я могу это сделать?Когда кто-то sudos как я, я вижу, что ни один из тех выше 3 файлов не используется.Я хочу всегда надежно добавлять ~ / bin к PATH, когда моя учетная запись пользователя используется, в том числе, когда кто-то поддается мне.

РЕДАКТИРОВАТЬ: Уточнение: Нет, вопреки подозрению в отношении дублирующихся вопросов, речь не идет оPATH / окружение alice переносятся на bob, когда alice запускает sudo bob some-program.Речь идет о том, чтобы у bob всегда была переменная PATH, которая имеет / home / bob / bin впереди всякий раз, когда bob вновь используется для запуска процесса, включая, но не обязательно, интерактивные сеансы, неинтерактивные сеансы и sudo'ed, ноособенно когда его судят, потому что это кажется самым проблематичным случаем.

1 Ответ

0 голосов
/ 13 июня 2019

Я использовал следующий скрипт ( каноническая копия ), который включает в себя список путей. Правда, я не использую sudo.

# Significant care is taken to be sh-compatible; if bash or zsh could be
# required, it could be made simpler or more generic.

# Known source'rs:
# ~/.profile
# ~/.zshrc
# ~/.xprofile
# ~/.xsessionrc
# ~/.bashrc
# ~/.config/plasma-workspace/env/*.sh

has_PATH () {
    local tmp=":$PATH:"
    [ "${tmp}" != "${tmp#*:$1:}" ]
}

prepend_PATH () {
    has_PATH "$1" || PATH="$1:$PATH"
}

append_PATH () {
    has_PATH "$1" || PATH="$PATH:$1"
}

prepend_PATH /usr/local/bin
prepend_PATH ~/.local/bin
prepend_PATH ~/bin
prepend_PATH /usr/lib/ccache
append_PATH /usr/sbin
append_PATH /sbin
append_PATH /usr/local/games
append_PATH /usr/games
export PATH
...