Исправление установки пути в файле ~/.profile
Есть строка в ~/.profile
который
PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
Я не уверен насчет последнего i
,
- Должен ли я удалить это??
- Разве это не ошибка синтаксиса?
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
восстановить ваш путь.
Чтобы увидеть изменения, вам нужно выйти из системы и снова войти или запустить source ~/.profile
в любой оболочке, которую вы используете (или запустите оболочку с bash -l
), так как .profile
читается только логинами.
Если вы не внесли это изменение в свой .profile
самостоятельно, вы можете восстановить файл по умолчанию, запустив
mv ~/.profile{,.old}
cp /etc/skel/.profile ~/.profile
Это переименовывает старый .profile
.profile.old
(вы также можете удалить файл, если хотите) и заменить его версией по умолчанию для вашей системы из /etc/skel
,
Да, это синтаксическая ошибка, фактическая .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, где проверка, если пользователи 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/
,
Я думаю, что здесь неясно, что означает следующее выражение:
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 в своем ответе.