Исправление установки пути в файле ~ / .profile

В ~/.profile есть строчка

PATH="$HOME/bin:$HOME/.local/bin:$PATH"i

. Я не уверен насчет последнего i.

  • Должен ли я удалить его ??
  • Разве это не синтаксическая ошибка ??
11
задан 7 December 2017 в 12:56

3 ответа

Нет, это не синтаксическая ошибка; это просто буква, которая добавляется после расширения $PATH, потому что оболочка удаляет кавычки ...

$ PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
$ echo $PATH
/home/zanna/bin:/home/zanna/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bini

Таким образом, помимо добавления локальных каталогов, он эффективно удалил существующий /snap/bin из моего PATH и добавил несуществующий /snap/bini.

Вы можете удалить i, чтобы восстановить вашу PATH.

Чтобы увидеть изменения, вам нужно будет выйти и снова войти или запустить source ~/.profile в любой используемой вами оболочке (или запустить оболочку с bash -l), потому что .profile читается login только снаряды .

Если вы не внесли это изменение в .profile самостоятельно, вы можете восстановить файл по умолчанию, выполнив

mv ~/.profile{,.old}
cp /etc/skel/.profile ~/.profile

Это переименует старую .profile .profile.old (вы также можете удалите файл, если хотите) и замените его версией по умолчанию для вашей системы из /etc/skel.

12
ответ дан 7 December 2017 в 12:56
  • 1
    Это не работает в человечности, исправленной для edubuntu. Я все еще can' t видят пользователя root в то время как вход в систему. Это просто просит у меня пароль текущего пользователя. –  3 December 2012 в 17:11
  • 2
    Это не работает в человечности, исправленной для edubuntu. Я все еще can' t видят пользователя root в то время как вход в систему. Это просто просит у меня пароль текущего пользователя. –  3 December 2012 в 17:11
  • 3
    Это не работает в человечности, исправленной для edubuntu. Я все еще can' t видят пользователя root в то время как вход в систему. Это просто просит у меня пароль текущего пользователя. –  3 December 2012 в 17:11
  • 4
    Это не работает в человечности, исправленной для edubuntu. Я все еще can' t видят пользователя root в то время как вход в систему. Это просто просит у меня пароль текущего пользователя. –  3 December 2012 в 17:11
  • 5
    Это не работает в человечности, исправленной для edubuntu. Я все еще can' t видят пользователя root в то время как вход в систему. Это просто просит у меня пароль текущего пользователя. –  3 December 2012 в 17:11
  • 6
    Это не работает в человечности, исправленной для edubuntu. Я все еще can' t видят пользователя root в то время как вход в систему. Это просто просит у меня пароль текущего пользователя. –  3 December 2012 в 17:11

Мне кажется, здесь неясно, что означает следующее выражение:

PATH="$HOME/bin:$HOME/.local/bin:$PATH"i

Первая часть PATH= означает, что мы присваиваем новое значение переменной (environment) $PATH.

Вторая часть - это новое значение этой переменной. В текущем случае переменная $HOME будет расширена с ее текущим значением, и к этому значению будет добавлена ​​строка /bin:. То же самое относится и к следующей части строки $HOME/.local/bin:. Наконец, текущее (предыдущее) значение переменной $PATH будет расширено и добавлено. Двоеточие : играет роль разделителя в выражении PATH.

Цель в конечном итоге написать: PATH=<some additional paths>+<the the current value of $PATH>. Мы помещаем эти дополнительные пути перед строкой, потому что мы хотим, чтобы оболочка искала исполняемые файлы сначала в этих местах, а затем в масштабе всей системы.

Символ i не нужен. Он будет добавлен к новому значению $PATH и создаст беспорядок, как объясняет @Zanna в своем ответе .

4
ответ дан 7 December 2017 в 12:56

Да, это синтаксическая ошибка, фактический .profile должен выглядеть следующим образом, если вы не изменили ситуацию (это версия 17.10, см. Примечания под ней):

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Это может выглядеть иначе в более старых версиях Ubuntu, где проверка наличия каталога users bin не была включена в .profile. Самый простой способ проверить, как это должно выглядеть - взглянуть на /etc/skel/.profile.

Таким образом, чтобы добавить, как вы просили в своем комментарии, просто поместите это в конец файла вашего профиля:

# Manual addition for swift development snapshot
export PATH="$PATH:/home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin"

Если вы когда-либо испортите свой профиль полностью, есть копия, где вы можете получить новый из /etc/skel/.

4
ответ дан 7 December 2017 в 12:56

Другие вопросы по тегам:

Похожие вопросы: