Saya telah menetapkan jalur yang sama dalam variabel $ PATH 6 kali.
Saya tidak keluar untuk memeriksa apakah itu berhasil.
Bagaimana cara menghapus duplikat?
Variabel $ PATH terlihat seperti ini:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin
Bagaimana cara meresetnya menjadi hanya
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Jawaban:
Anda baru saja mengeksekusi:
itu untuk sesi saat ini, jika Anda ingin mengubahnya secara permanen tambahkan ke .bashrc, bash.bashrc, / etc / profile - apapun yang sesuai dengan kebutuhan sistem dan pengguna Anda.
Catatan: Ini untuk Linux. Kami akan menjelaskan ini untuk pembuat kode baru. (',') Jangan mencoba SET = ini.
sumber
echo 'export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' >> ~/.bashrc
Jika Anda menggunakan Bash, Anda juga dapat melakukan hal berikut jika, katakanlah, Anda ingin menghapus direktori
/home/wrong/dir/
dariPATH
variabel Anda :sumber
PATH=$(echo $PATH | sed -e 's|:/home/wrong/dir|$||')
echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'
) sebelum menugaskannya ke PATH.$PATH
. Gunakan yang ini:PATH=$(echo :$PATH: | sed -e 's,:/home/wrong/dir:,:,g' -e 's/^://' -e 's/:$//')
$ PATH=
echo $ PATH | sed -e 's /: \ / scratch \ / sjn \ / anaconda \ / bin \ / python \ / $ //' "untuk menghapus / scratch / sjn / anaconda / bin / pythonLinux From Scratch memiliki fungsi ini di / etc / profile
Ini dimaksudkan untuk digunakan dengan fungsi berikut untuk menambahkan ke jalur, sehingga Anda tidak melakukannya secara berlebihan:
Penggunaan sederhana adalah hanya memberikan
pathremove
jalur direktori untuk dihapus - tetapi perlu diingat bahwa itu harus sama persis:Ini akan menghapus setiap instance dari direktori itu dari jalur Anda.
Jika Anda menginginkan direktori di jalur Anda, tetapi tanpa redundansi, Anda bisa menggunakan salah satu fungsi lain, misalnya - untuk kasus khusus Anda:
Tapi, kecuali keterbacaan menjadi perhatian, pada titik ini Anda lebih baik hanya melakukan:
Akankah hal di atas berhasil di semua cangkang yang diketahui manusia?
Aku akan menganggap di atas untuk bekerja di
sh
,dash
danbash
setidaknya. Saya akan terkejut mengetahui bahwa itu tidak berhasilcsh
,fish', or
ksh`. Saya ragu itu akan bekerja di shell perintah Windows atau Powershell.Jika Anda memiliki Python, perintah semacam berikut harus melakukan apa yang diminta secara langsung (yaitu, hapus jalur yang berlebihan):
Satu baris (untuk menghindari masalah multiline):
Di atas menghapus jalur redundan kemudian. Untuk menghapus jalur redundan sebelumnya, gunakan indeks daftar terbalik dan balikkan lagi:
sumber
${!PATHVARIABLE}
itu semacam tipuan variabel, tapi saya tidak yakin cara kerjanya di sini. Bisakah Anda menjelaskannya?local
builtin (yang hanya dapat digunakan di dalam fungsi.) Jika Anda memiliki pertanyaan lebih lanjut, Anda mungkin harus mengajukan pertanyaan baru di situs (setelah mencarinya terlebih dahulu untuk memastikan Anda tidak membuat duplikat persis ...).Berikut adalah kode satu baris yang membersihkan PATH
Menggunakan
/bin/awk
sehingga berfungsi bahkan saat PATH rusaksumber
echo $PATH
PATH= # pass new list of entries
sumber
Jika Anda hanya ingin menghapus jalur duplikat, saya menggunakan skrip yang saya tulis beberapa waktu lalu karena saya mengalami masalah dengan beberapa jalur perl5 / bin:
Dan saya menaruhnya di profil ~ /. Saya di bagian akhir. Karena saya menggunakan BASH hampir secara eksklusif, saya belum mencobanya di shell lain.
sumber
|uniq
ke|sort|uniq
untuk memperbaiki ini, tetapi ini akan mengubah urutan semua direktori di jalur yang menurut saya bukan efek samping yang diinginkan.Dengan asumsi shell Anda adalah Bash, Anda dapat mengatur jalurnya dengan
tetapi seperti yang dikatakan Levon dalam jawaban lain, segera setelah Anda menghentikan shell, perubahan akan hilang. Anda mungkin ingin mengatur
PATH
dalam~/.bash_profile
atau~/.bashrc
.sumber
Di bash Anda cukup $ {var / find / replace}
Atau dalam kasus ini (karena bit ganti kosong) cukup:
Saya datang ke sini lebih dulu tetapi pergi ke tempat lain karena saya pikir akan ada perluasan parameter untuk melakukan ini. Lebih mudah dari sed !.
Bagaimana cara mengganti karakter placeholder atau kata dalam variabel dengan nilai dari variabel lain di Bash?
sumber
%
Berarti cocok jika di akhir string,#
adalah untuk awal.Tidak ada alat standar untuk "mengedit" nilai
$PATH
(yaitu "tambahkan folder hanya jika belum ada" atau "hapus folder ini").Untuk memeriksa apa jalurnya saat Anda masuk di lain waktu, gunakan
telnet localhost
(atautelnet 127.0.0.1
). Ini kemudian akan meminta nama pengguna dan kata sandi Anda.Ini memberi Anda shell login baru (yaitu yang benar-benar baru yang tidak mewarisi apa pun dari lingkungan saat ini).
Anda dapat memeriksa nilai di
$PATH
sana dan mengedit file rc Anda sampai benar. Ini juga berguna untuk melihat apakah Anda bisa login lagi setelah melakukan perubahan pada file penting.sumber
/bin/bash -i
. Jauh lebih mudah.Bagaimana Anda menambahkan jalur duplikat ini ke variabel PATH Anda? Anda pasti sudah mengedit salah satu
.
file Anda . (.tcshrc
, atau.bashrc
, dll tergantung pada sistem / shell Anda). Cara untuk memperbaikinya adalah dengan mengedit file lagi dan menghapus jalur duplikat.Jika Anda tidak mengedit file apa pun, dan Anda pasti sudah memodifikasi PATH secara interaktif. Dalam hal ini perubahan tidak akan "melekat", yaitu jika Anda membuka shell lain, atau keluar dan masuk kembali, perubahan akan hilang secara otomatis.
Perhatikan bahwa ada beberapa file konfigurasi seluruh sistem juga, tetapi tidak mungkin Anda mengubahnya, jadi kemungkinan besar Anda akan mengubah file di direktori home pribadi Anda (jika Anda ingin membuat perubahan itu permanen setelah Anda menyelesaikan serangkaian jalur)
sumber
Untuk template copy-paste yang mudah saya menggunakan potongan Perl ini:
Dengan cara ini Anda tidak perlu keluar dari garis miring untuk operator pengganti.
sumber