Виправлення налаштування шляху у файлі ~ / .profile


11

Є рядок, в ~/.profileякому є

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

Я не впевнений в останньому i.

  • Чи варто його видалити ??
  • Хіба це не синтаксична помилка ??


4
@dessert Я не впевнений, що це дублікат. Я згоден, обидва стосуються $PATHзмінної середовища, але вони зовсім не дублікати. У крайньому випадку вони споріднені. Це питання - це питання, в ~/.profileякому просто виявляється зайвий символ у рядку, де призначено $PATHоточення.
Дан

@Dan Найвища (!) Відповідь у повторюваному запитанні пояснює, як має виглядати PATH=рядок у ~/.profileдійсному - що є реальним питанням тут.
десерт

1
@ десерт, що ОП тут є цілком дійсним, це не проблема недійсного формату. Це працює, це просто не робить нічого корисного.
тердон

2
Так, я використовую редактор vi. Можливо, я випадково помістив "я" у файл, як сказав десерт. Але тоді мені довелося: wq, щоб зробити його ефективним. Я думаю, я цього не робив, але, враховуючи свій рівень, я міг би зробити якусь дурну штуку.
Посмішка

Відповіді:


13

Ні, це не синтаксична помилка; це лише лист, який додається після розширення $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вона читається лише оболонками для входу .

Якщо ви самі не зробили цієї зміни .profile, можливо, захочете відновити файл за замовчуванням, запустивши

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

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


5

Я думаю, тут незрозуміло, що означає наступний вираз:

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

Перша частина PATH=означає, що ми присвоюємо нове значення змінній (оточення) $PATH.

Друга частина - нове значення цієї змінної. У поточному випадку змінна $HOMEбуде розширена своїм поточним значенням і до цього значення додається рядок /bin:. Те саме стосується і наступної частини рядка $HOME/.local/bin:. Нарешті поточне (попереднє) значення $PATHзмінної буде розширено та додане. Товста кишка :відіграє роль розмежувача у PATHвиразі.

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

Характер iнепотрібний. Він буде доданий до нового значення $PATHта створить безлад, як пояснює @Zanna у своїй відповіді .


5

Так, це синтаксична помилка, фактична .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/.


1
У мене є один додатковий рядок "експортувати PATH = $ PATH: /home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin", тому що я встановив його. Це добре ??
Посмішка

3
Цей рядок чудово, я включив його в свій приклад, щоб показати, де його розмістити.
Videonauth

1
Зауважте, що /etc/skel/.profile16.04 виглядає інакше, без тесту, чи "$HOME/bin"існує. Навіть якщо це був кращий варіант (ІМО), схоже, це було змінено ще в 17.10 - з причини чи помилки.
Gunnar Hjalmarsson

@GunnarHjalmarsson відзначить, що в моєму дописі, і так, це skel / .profile від 17.10 я бігаю на.
Videonauth
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.