~ / .Profile dosyasındaki yol ayarını düzeltme


11

İçinde bir çizgi ~/.profilevar

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

Sonuncusundan emin değilim i.

  • Çıkarmalı mıyım ??
  • Bir sözdizimi hatası değil mi ??


4
@ tatlı Bu bir kopya olduğundan emin değilim. Her ikisinin de $PATHçevre değişkeni ile ilgili olduğunu kabul ediyorum , ancak hiç kopya değiller. En fazla, onlar ilişkilidir. Bu soru, ortamın atandığı ~/.profilesatırda fazladan bir karakter olduğu bir sorundur $PATH.
Dan

@Dan Yinelenen sorudaki en yüksek oyu alan (!) Cevap, bir PATH=satırın nasıl ~/.profilegeçerli olması gerektiğini açıklıyor - buradaki asıl soru bu.
tatlı

1
@ OP tatlı burada sahip olduğu mükemmel geçerlidir, geçersiz bir biçim sorunu değildir. Bu işe yarıyor, yararlı bir şey yapmıyor.
terdon

2
Evet vi editörü kullanıyorum. Muhtemelen tatlı gibi dediğim dosyaya yanlışlıkla 'i' koyuyorum. Ama sonra: etkili yapmak için wq zorunda kaldı. Sanırım yapmadım, ama seviyem göz önüne alındığında aptalca bir şey yapmış olabilirim.
gülümse

Yanıtlar:


13

Hayır, bir sözdizimi hatası değil; bu sadece genişlemesinden sonra eklenen bir harftir $PATH, çünkü kabuk tırnak işaretlerini kaldırır ...

$ 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

Bu nedenle, yerel dizinleri hazırlamanın yanı sıra, var olanı PATH'ımdan etkili bir şekilde kaldırdı ve var /snap/binolmayanları ekledi /snap/bini.

iPATH'inizi onarmak için çıkarabilirsiniz .

Değişikliği görmek için source ~/.profile, kullandığınız herhangi bir kabukta oturumu kapatıp tekrar açmanız veya çalıştırmanız (veya kabuğu başlat bash -l) gerekir, çünkü yalnızca giriş kabukları.profile tarafından okunur.

Bu değişikliği .profilekendinize yapmadıysanız , varsayılan dosyayı çalıştırarak geri yüklemek isteyebilirsiniz.

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

Bu, eskisini yeniden adlandırır .profile .profile.old(isterseniz dosyayı silebilirsiniz) ve yerine sisteminizin varsayılan sürümüyle değiştirir /etc/skel.


5

Burada aşağıdaki ifadenin ne anlama geldiği açık değil:

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

İlk bölüm PATH=, (ortam) değişkenine yeni bir değer atadığımız anlamına gelir$PATH .

İkinci bölüm, bu değişkenin yeni değeridir. Mevcut durumda değişken $HOME, geçerli değeri ile genişletilecek ve bu değere dize eklenecektir /bin:. Aynı şey dizenin sonraki kısmı için de geçerlidir $HOME/.local/bin:. Son olarak, $PATHdeğişkenin mevcut (önceki) değeri genişletilecek ve eklenecektir. İki nokta üst üste ifadede :ayırıcı rol oynar PATH.

Amaç yazma için sonuçta geçerli: PATH=<some additional paths>+<the the current value of $PATH>. Bu ek yolları dizenin önüne koyarız, çünkü kabuğun önce bu konumlarda ve sonra sistem çapında yürütülebilir dosyaları aramasını isteriz.

Karakter igereksiz. Bu yeni değere eklenecek $PATHve @Zanna onu açıkladığı gibi, bir karışıklık yapacak cevap .


5

Evet bir sözdizimi hatasıdır, .profileetrafta bir şey değiştirmedikçe gerçek şu şekilde görünmelidir (bu 17.10 sürümüdür, altındaki notlara bakın):

# ~/.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

Bu, users bindizininin mevcut olup olmadığını denetlemenin Ubuntu'nun eski sürümlerinde farklı görünebilir .profile. Nasıl görünmesi gerektiğini kontrol etmenin en kolay yolu,/etc/skel/.profile .

Yorumunuza sorduğunuz gibi eklemek için bunu profil dosyanızın sonuna yerleştirin:

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

Profilinizi tamamen karıştırırsanız, içinden yeni bir tane alabileceğiniz bir kopya var /etc/skel/.


1
Ek bir satırım var "ihracat PATH = $ PATH: /home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin" çünkü onu yükledim. İyi mi??
gülümse

3
Bu çizgi, nereye yerleştireceğimi göstermek için örneğime dahil ettim.
Videonauth

1
Lütfen /etc/skel/.profile16.04'te "$HOME/bin"var olup olmadığını test etmeden farklı göründüğünü unutmayın . Bu daha iyi bir varyant (IMO) olsa bile, 17.10'da bir nedenden dolayı veya yanlışlıkla değiştirilmiş gibi görünüyor.
Gunnar Hjalmarsson

@GunnarHjalmarsson yazımda bunu not edecek ve evet bu, 17.10'dan itibaren skel / .profile olarak çalışıyorum.
Videonauth
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.