Memperbaiki pengaturan jalur dalam file ~ / .profile

11

Ada garis di ~/.profilemana

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

Saya tidak yakin tentang yang terakhir i.

  • Haruskah saya menghapusnya ??
  • Bukankah ini kesalahan sintaksis ??
Tersenyum
sumber
4
#: 33817 ddualian Saya tidak yakin itu duplikat. Saya setuju keduanya tentang $PATHvariabel lingkungan, tetapi mereka bukan duplikat sama sekali. Paling-paling, mereka terkait. Pertanyaan ini adalah masalah di ~/.profilemana kebetulan merupakan karakter tambahan di baris di mana $PATHlingkungan ditugaskan.
Dan
@Dan Jawaban dengan suara terbanyak (!) Dalam pertanyaan duplikat menjelaskan bagaimana PATH=garis dalam ~/.profileseharusnya terlihat valid - yang merupakan pertanyaan sebenarnya di sini.
hidangan penutup
1
@dabut apa yang OP miliki di sini benar-benar valid, itu bukan masalah format yang tidak valid. Ini berfungsi, itu hanya tidak melakukan sesuatu yang bermanfaat.
terdon
2
Ya saya menggunakan vi editor. Mungkin saya tidak sengaja memasukkan 'i' dalam file seperti kata dessert. Tapi kemudian saya harus: wq untuk membuatnya efektif. Saya pikir saya tidak melakukannya, tetapi mengingat level saya, saya mungkin telah melakukan beberapa hal bodoh.
Tersenyumlah

Jawaban:

13

Tidak, ini bukan kesalahan sintaksis; itu hanya surat yang ditambahkan setelah ekspansi $PATH, karena shell menghapus tanda kutip ...

$ 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

Jadi, serta menambah direktori lokal, ia secara efektif menghilangkan yang ada /snap/bindari PATH saya, dan menambahkan yang tidak ada /snap/bini.

Anda dapat menghapus iuntuk memperbaiki PATH Anda.

Untuk melihat perubahannya, Anda harus keluar dan kembali atau menjalankan source ~/.profileshell yang Anda gunakan (atau meluncurkan shell dengan bash -l), karena .profilehanya dibaca oleh shell login saja.

Jika Anda tidak membuat perubahan ini untuk Anda .profilesendiri, Anda mungkin ingin mengembalikan file default dengan menjalankan

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

Ini mengganti nama yang lama .profile .profile.old(Anda juga bisa menghapus file jika Anda mau) dan menggantinya dengan versi default untuk sistem Anda /etc/skel.

Zanna
sumber
5

Saya pikir di sini tidak jelas apa arti ungkapan berikut:

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

Bagian pertama PATH=berarti kita menetapkan nilai baru ke variabel (lingkungan) $PATH.

Bagian kedua adalah nilai baru dari variabel itu. Dalam kasus saat ini, variabel $HOMEakan diperluas dengan nilai saat ini dan ke nilai itu akan ditambahkan string /bin:. Hal yang sama berlaku untuk bagian selanjutnya dari string $HOME/.local/bin:. Akhirnya nilai $PATHvariabel saat ini (sebelumnya) akan diperluas dan ditambahkan. Usus besar :memainkan peran pembatas dalam PATHekspresi.

Tujuannya adalah akhirnya menulis: PATH=<some additional paths>+<the the current value of $PATH>. Kami menempatkan jalur tambahan ini di depan string, karena kami ingin shell untuk mencari executable terlebih dahulu di lokasi ini dan hanya kemudian di seluruh sistem.

Karakter itidak perlu. Ini akan ditambahkan ke nilai baru $PATHdan akan membuat berantakan, seperti @Zanna menjelaskan dalam jawabannya .

pa4080
sumber
5

Ya itu adalah kesalahan sintaksis, yang sebenarnya .profileakan terlihat seperti ini kecuali jika Anda mengubah keadaan (ini adalah versi 17.10, lihat catatan di bawahnya):

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

Ini mungkin terlihat berbeda di versi Ubuntu yang lebih lama di mana pemeriksaan apakah bindirektori pengguna ada tidak dimasukkan ke dalam .profile. Cara termudah untuk memeriksa bagaimana seharusnya terlihat adalah dengan melihatnya /etc/skel/.profile.

Jadi untuk menambahkan saat Anda bertanya dalam komentar Anda cukup letakkan ini di akhir file profil Anda:

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

Jika Anda benar-benar mengacaukan profil Anda, ada salinan tempat Anda bisa mendapatkan yang baru /etc/skel/.

Videonauth
sumber
1
Saya memiliki satu baris tambahan "export PATH = $ PATH: /home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin" karena saya menginstalnya. Itu baik??
Senyum
3
Baris ini baik-baik saja saya memasukkannya ke dalam contoh saya untuk menunjukkan tempat untuk meletakkannya.
Videonauth
1
Harap dicatat bahwa /etc/skel/.profilepada 16,04 terlihat berbeda, tanpa tes apakah "$HOME/bin"ada. Bahkan jika itu adalah varian yang lebih baik (IMO), tampaknya telah diubah kembali pada 17.10 - karena suatu alasan atau karena kesalahan.
Gunnar Hjalmarsson
@ GunnarHjalmarsson akan mencatat bahwa dalam posting saya, dan ya ini adalah skel / .profile dari 17.10 Saya sedang menjalankan.
Videonauth