Pertanyaan Mengoreksi pengaturan jalur di file ~ / .profile


Ada garis di ~/.profile yang mana

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

Saya tidak yakin tentang yang terakhir i.

  • Haruskah saya menghapusnya ??
  • Bukankah itu kesalahan sintaks ??

10
2017-12-07 09:26


asal


Kemungkinan duplikat dari Menambahkan jalur khusus dengan memperbarui ~ / .profile dengan tidak berfungsi - dessert
@dessert Saya tidak yakin itu duplikat. Saya setuju keduanya tentang $PATH variabel lingkungan, tetapi mereka tidak duplikat sama sekali. Paling banyak, mereka terkait. Pertanyaan ini merupakan masalah di ~/.profile yang kebetulan menjadi karakter tambahan di baris di mana $PATH lingkungan ditugaskan. - Dan
@Dan Jawaban tertinggi (!) Dalam pertanyaan duplikat menjelaskan bagaimana a PATH= antri ~/.profile harus terlihat seperti valid - yang merupakan pertanyaan nyata di sini. - dessert
@dessert apa yang OP miliki di sini sangat valid, itu bukan masalah format yang tidak valid. Ini berfungsi, itu tidak berguna. - terdon♦
Ya, saya menggunakan editor vi. Mungkin saya secara tidak sengaja meletakkan 'i' dalam file seperti makanan penutup kata. Tetapi kemudian saya harus: wq untuk membuatnya efektif. Saya pikir saya tidak melakukannya, tetapi mengingat level saya, saya mungkin telah melakukan beberapa hal bodoh. - Smile


Jawaban:


Tidak, ini bukan kesalahan sintaks; itu hanya surat yang ditambahkan setelah perluasan $PATH, karena cangkang 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, seperti halnya direktori lokal yang sudah ada sebelumnya, secara efektif telah menghapus yang ada /snap/bin dari PATH saya, dan menambahkan yang tidak ada /snap/bini.

Anda dapat menghapus i untuk memperbaiki PATH Anda.

Untuk melihat perubahan, Anda harus keluar dan masuk atau menjalankan kembali source ~/.profile dalam shell apa pun yang Anda gunakan (atau jalankan shell dengan bash -l), karena .profile dibaca oleh cangkang login hanya.

Jika Anda tidak membuat perubahan ini menjadi milik Anda .profile diri Anda sendiri, 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 ingin) dan menggantikannya dengan versi default untuk sistem Anda /etc/skel.


12
2017-12-07 09:39





Ya itu adalah kesalahan sintaks, yang sebenarnya .profile seharusnya terlihat seperti ini kecuali Anda mengubah banyak hal (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 memeriksa apakah pengguna bin direktori hadir tidak termasuk dalam .profile. Cara termudah untuk memeriksa bagaimana seharusnya terlihat /etc/skel/.profile.

Jadi untuk menambahkan seperti yang Anda minta 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 pernah mengacaukan profil Anda sepenuhnya, ada salinan di mana Anda bisa mendapatkan yang baru dari dalam /etc/skel/.


4
2017-12-07 09:29



Saya memiliki satu baris ekstra "ekspor PATH = $ PATH: /home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin" karena saya menginstalnya. Itu baik?? - Smile
Baris ini baik-baik saja saya memasukkannya ke dalam contoh saya untuk menunjukkan di mana untuk menempatkannya. - Videonauth
Harap dicatat bahwa /etc/skel/.profile di 16.04 terlihat berbeda, tanpa ujian apakah "$HOME/bin" ada. Bahkan jika itu adalah varian yang lebih baik (IMO), tampaknya telah diubah kembali di 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 berlari. - Videonauth


Saya pikir di sini tidak jelas apa arti ekspresi 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 ini, variabel $HOME akan 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 saat ini (sebelumnya) dari $PATH variabel akan diperluas dan ditambahkan. Usus besar : memainkan peran pemisah dalam PATH ekspresi.

Tujuannya adalah untuk 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 file yang dapat dieksekusi terlebih dahulu di lokasi ini dan hanya kemudian sistem yang luas.

Karakter i tidak perlu. Ini akan ditambahkan ke nilai baru $PATH dan akan membuat kekacauan, karena @Zanna menjelaskan padanya menjawab.


3
2017-12-07 10:02