$ HOME / bin dir tidak di $ PATH

11

Di saya, ~/.profilesaya memiliki blok terakhir yang harus memuat pribadi saya bin/ directoryseperti ini:

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

Tapi sepertinya tidak dimuat:

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

Mengapa ini tidak berhasil? (Shell saya adalah bash.)

Edit untuk Tigger

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/"
Chris Tang
sumber
Untuk latar belakang pada bagian ini .profile, lihat askubuntu.com/questions/284640 .
JdeBP
Shell yang mana ini?
njsg
2
Saya menganggap direktori itu ada, kan?
Kalahkan Bolli
@njsg itu bash
Mungkin ada hal lain yang mengatur ulang variabel PATH Anda setelah ini dijalankan. Anda dapat memverifikasi dengan menggunakan -xflag yang diteruskan ke bash dan melihat di mana PATH diatur ulang. Juga, Anda perlu export PATH="$HOME/bin:$PATH"menyediakannya untuk proses selanjutnya.
Charles Addis

Jawaban:

10

Dari atas ~/.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.

Jadi (jika Anda menggunakan bashshell Anda) Saya menebak ~/.bash_profileatau ~/.bash_loginada di sistem Anda. Pilih satu dan edit untuk memasukkan:

export PATH=$PATH:$HOME/bin

Kemudian simpan dan source ~/.bash_loginatau keluar dan masuk kembali.

Edit :

Anda mengatakan bahwa keduanya ~/.bash_profiledan ~/.bash_loginkeduanya hilang dari Anda $HOME. Saya pikir kita perlu mengkonfirmasi beberapa hal. Silakan kirim hasil berikut ini di pertanyaan awal Anda:

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

Edit 2 :

Secara pribadi, saya tidak tahu mengapa ~/.profiletidak dimasukkan dalam kasus Anda berdasarkan informasi yang diberikan dan dokumentasi. Saat pengujian saya memang melihat bahwa saya ~/.profiledipindai ketika saya sshmasuk tetapi tidak ketika saya meluncurkan terminal baru.

Tapi, ada solusi sederhana yang memungkinkan $HOME/binuntuk dimasukkan dalam shell interaktif Anda. Edit (buat jika tidak ada) ~/.bashrcdan tambahkan baris berikut ke dalamnya:

export PATH=$PATH:$HOME/bin

Simpan, keluar dan masuk kembali, atau source ~/.bashrc.

The exportgaris bisa diperluas untuk memeriksa bahwa $HOME/binada jika Anda suka dengan:

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

Kenapa ~/.bashrcbukannya file lain? Preferensi pribadi dan tampaknya lebih dapat diandalkan juga.

Tigger
sumber
Meskipun, karena penanya tidak menentukan shell mana, ada juga kemungkinan bahwa seseorang tidak menggunakan shell Bourne Again sama sekali. Tentu saja orang lain dengan pertanyaan yang sama mungkin tidak.
JdeBP
@ JdeBP: menambahkan klarifikasi untuk menjawab. Diasumsikan sebagai pengguna Debian mereka tidak mengubah shell interaktif default mereka, tapi saya kira mereka bisa.
Tigger
Saya tidak memiliki salah satu dari ~/.bash_profilekeduanya ~/.bash_login. Di saya ~hanya ada .bash_historydan .bash_logout(dan tentu saja .profile).
@ Tiger diperbarui!
@student: Membuat pembaruan lain. Benar-benar bingung apa yang sedang terjadi. Cukup tertarik untuk mendengar jika Anda mengetahui mengapa ~/.profiledilewati.
Tigger
6

The aturan untuk di-sumber file shell startup yang kompleks . Kemungkinan dengan pengaturan Anda, .profiletidak dimasukkan ketika Anda membuka terminal baru dalam sesi X (coba masukkan bagian echo .profiledalam .profiledan lihat apakah pesannya muncul ketika Anda memulai shell).

.  "$HOME/.profile"

harus memuat ulang profil secara manual.

Masuk dan keluar dari X juga harus menyebabkan .profilememuat.

Atau, Anda dapat melakukannya . $HOME/.profiledari .bashrc(saat menggunakan penjaga berbasis variabel untuk mencegah inklusi ganda) untuk memastikan .profileselalu disertakan setiap kali Anda memulai shell.

(Anda seharusnya tidak perlu export PATHkarena PATHsudah menjadi variabel yang diekspor dan memodifikasi nilainya tidak akan mengubah exportstatusnya.)

PSkocik
sumber
sumber. profil dari .bashrc! dalam kebanyakan kasus. profil mengandung `. .bashrc`, ini tidak akan melewati loop yang tak terbatas ?!
Jonah
@youness saya melakukan keduanya dan saya menggunakan termasuk penjaga ( [ -z "$has___profile" ] || return; has__profile=1) jadi saya tidak mendapatkan loop tak terbatas dan keduanya .profiledan .bashrc(hanya jika BASH_VERSION didefinisikan) tidak peduli bagaimana saya sampai di sana.
PSkocik
Saya mendapatkannya ! bahasa Inggris saya yang buruk mendorong saya untuk mengajukan pertanyaan yang tidak dibutuhkan ini, (memasukkan kode untuk penjelasan lebih baik daripada ungkapan literal). terima kasih atas waktu Anda :-)
Jonah
Sederhana bash -lakan memuat .profile(kecuali beberapa konfigurasi aneh). Selain itu, PATH harus ditetapkan dengan benar ketika pengguna masuk. Itu berarti dalam "manajer tampilan" (dm) yang digunakan: gnome, KDE, xfce, lxde, dll.
Isaac
1

Jika Anda ingin .profiledimuat, Anda hanya perlu memulai shell login:

$ bash -l

Itu sudah cukup untuk sesi lari. Anda dapat membandingkan PATH sebelum dan setelah pesta login telah dimulai untuk mengkonfirmasi perbedaannya.

Untuk solusi yang lebih permanen, Anda perlu memulai shell login di beberapa titik sebelum terminal (konsol) Anda dimulai. Login sebagai pengguna tertentu terjadi pada beberapa dm (manajer tampilan) (gnome, kde, xfce, lxde, dll). Seharusnya merupakan tugas mereka untuk mengubah variabel PATH lingkungan agar sesuai dengan kebutuhan Anda.

Sebagai contoh, untuk xfce, solusinya adalah mengubah 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"

Untuk gnome, tampaknya file yang akan diubah adalah ~/.pam_environment.

Dan untuk KDE, ikuti panduan ini , untuk membuat file, Anda dapat menggunakan kode ini:

$ file='$HOME/.config/plasma-workspace/env/path.sh'
$ code='export PATH=$HOME/bin:$PATH'
$ echo "$code" >> "$file"
Ishak
sumber