$ HOME / bin dizin $ PATH üzerinde değil


11

Benim içinde ~/.profileben benim kişisel yüklenmesi gereken bir son blok var bin/ directoryböyle:

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

Ama görünüşte yüklü değil:

echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Bu neden çalışmıyor? (Kabuğum bash.)

Tigger için düzenle

echo $0 => bash

echo $HOME => /home/student

whoami => student

less /etc/*-release => 
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Bu bölümün arka planı için .profilebkz. Askubuntu.com/questions/284640 .
JdeBP

Bu hangi kabuk?
njsg

2
Dizinin var olduğunu varsayıyorum, değil mi?
Bolli

@njsg is bash

Bu çalıştırıldıktan sonra muhtemelen başka bir şey PATH değişkeninizi sıfırlıyor. -xBash'a iletilen bayrağı kullanarak ve PATH'ın nerede sıfırlandığını görerek doğrulayabilirsiniz . Ayrıca, bunu export PATH="$HOME/bin:$PATH"sonraki işlemlere sağlamanız gerekir.
Charles Addis

Yanıtlar:


10

Yukarıdan ~/.profile:

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

Yani (eğer bashkabuk olarak kullanıyorsanız ) ya ben ya ~/.bash_profileda ~/.bash_loginsisteminizde tahmin ediyorum . Birini seçin ve aşağıdakileri içerecek şekilde düzenleyin:

export PATH=$PATH:$HOME/bin

Ardından kaydedin ve source ~/.bash_loginveya oturumu kapatın ve tekrar oturum açın.

Düzenle :

Bunu hem söylemek ~/.bash_profileve ~/.bash_loginhem eksik $HOME. Sanırım birkaç şeyi doğrulamamız gerekiyor. Lütfen asıl sorunuza aşağıdakilerin sonuçlarını gönderin:

echo $0
echo $HOME
whoami
less /etc/*-release

Düzenleme 2 :

Şahsen, ~/.profilesağlanan bilgilere ve belgelere dayanarak neden davanıza dahil olmadığını bilmiyorum . Test sırasında, içeri girdiğimde ~/.profiletarandığını fark ettim ssh, ancak yeni bir terminal başlattığımda fark etmedim .

Ancak, $HOME/binetkileşimli kabuğunuza dahil edilmenize izin veren basit bir çözüm var . Düzenleyin (yoksa oluşturun) ~/.bashrcve aşağıdaki satırı ekleyin:

export PATH=$PATH:$HOME/bin

Kaydet, oturumu kapat ve tekrar giriş yap ya da source ~/.bashrc.

exportHat kontrol etmek genişletilmiş olabilir $HOME/binBirlikte isterseniz var:

if [ -d "$HOME/bin" ]
then
    export PATH=$PATH:$HOME/bin
fi

Neden ~/.bashrcbaşka bir dosya yerine? Şahsen tercih ve daha güvenilir gibi görünüyor.


Sorgulayan hangi mermiyi belirtmediğinden, Bourne Again mermisini hiç kullanmama olasılığı da vardır. Kesinlikle aynı soruya sahip diğer insanlar olmayabilir.
JdeBP

@JdeBP: cevaplamak için açıklama eklendi. Debian kullanıcısı olarak varsayılan interaktif kabuklarını değiştirmemişlerdi, ama sanırım sahip olabilirlerdi.
Tigger

Ben herhangi yok ~/.bash_profilene de ~/.bash_login. Benim ~sadece .bash_historyve .bash_logout(ve tabii ki .profile) vardır.

@Tigger güncellendi!

@student: Başka bir güncelleme daha yaptı. Gerçekten olup bitenler için bir kayıp. Neden ~/.profileatlandığını öğrenirseniz duymak oldukça ilginç .
Tigger

6

Kabuk başlangıç dosyaları karmaşık in-kaynak kuralları . Bu sizin kurulum ile, büyük olasılıkla .profile(bir koymayı deneyin bir X seans içinde yeni bir terminal açmak ne zaman dahil almıyor echo .profileiçini .profileve görürseniz bir kabuk başlattığınızda up mesajı gösterileri).

.  "$HOME/.profile"

profili manuel olarak yeniden yüklemelidir.

X'e giriş ve çıkış .profileyapmak da yüklenmeye neden olmalıdır .

Alternatif olarak, yapabileceğiniz . $HOME/.profilegelen .bashrcemin olmak için (çift girilmesini önlemek için değişken bazlı nöbet kullanırken) .profileEğer bir kabuk her başlattığınızda her zaman dahildir.

(Sen gerekmez export PATHolarak PATHzaten ihraç değişkendir ve değerini değiştirerek onun değişmeyecek exportdurumunu.)


kaynak .profile .bashrc! çoğu durumda .profile `içerir. .bashrc`, bu sonsuz bir döngü düşünülmeyecek mi ?!
Jonah

@ ben her ikisini de yapıyorum ve ben orada nasıl olursa [ -z "$has___profile" ] || return; has__profile=1olsun sonsuz döngüler ve her ikisini .profileve .bashrc(sadece BASH_VERSION tanımlanmışsa) olsun ben de korumaları ( ) dahil kullanıyorum .
PSkocik

anladım ! benim kötü ingilizce beni bu gereksiz soru sormak için itti, (açıklama için kod koymak gerçek ifade daha iyidir). zaman ayırdığınız için teşekkürler :-)
Jonah

Basit bash -lyüklenir .profile(bazı garip yapılandırmalar dışında). Ayrıca, kullanıcı oturum açtığında PATH doğru bir şekilde ayarlanmalıdır. Bu, kullanılan "görüntüleme yöneticisi" (dm) anlamına gelir: gnome, KDE, xfce, lxde, vb.
Isaac

1

.profileYüklenmek istiyorsanız tek yapmanız gereken bir giriş kabuğu başlatmaktır:

$ bash -l

Çalışan bir oturum için bu yeterli olmalıdır. Farkı onaylamak için bir giriş bash başlatılmadan önce ve sonra PATH'ı karşılaştırabilirsiniz.

Daha kalıcı bir çözüm için, terminal (konsol) başlamadan bir noktada bir oturum açma kabuğunun başlatılması gerekir. Belirli bir kullanıcı olarak oturum açma bazı dm'de ​​(ekran yöneticisi) (gnome, kde, xfce, lxde, vb.) PATH ortam değişkenini ihtiyaçlarınıza göre değiştirmek herhangi birinin işi olmalıdır.

Örneğin, xfce için çözüm şu şekildedir xinitrc:

$ cat >"$HOME/.config/xfce4/xinitrc" <<-\_EOT_
#!/bin/sh

# Ensure programs in ~/bin are available for the X session.
p="$HOME/bin";
[ "$p" != "${PATH%%:*}" ] && export PATH=$p:$PATH
_EOT_
cat "/etc/xdg/xfce4/xinitrc" | tail -n+2 >> "$HOME/.config/xfce4/xinitrc"

Gnome için, görünüyor ki değişime dosya olduğunu ~/.pam_environment.

Ve KDE için, bu kılavuzu izleyin , dosyayı oluşturmak için şu kodu kullanabilirsiniz:

$ file='$HOME/.config/plasma-workspace/env/path.sh'
$ code='export PATH=$HOME/bin:$PATH'
$ echo "$code" >> "$file"
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.