Berapa banyak cara berbeda yang bisa Anda buat "alias" di Bash?


10

Saya hanya tahu dua cara: alias foo=bardan function foo() { bar }.

Alasan saya bertanya adalah bahwa - tiba-tiba di salah satu sesi bash saya - saya tidak dapat menjalankan lnperintah karena bashkesalahan dengan -bash: /usr/local/.../ln: No such file or directory(di mana /usr/local/.../adalah salah satu entri dalam PATHvariabel lingkungan saya ).

Ini bukan PATHmasalah, karena jika saya menjalankannya which lnmenghasilkan biner yang diharapkan /usr/bin/ln(yang bisa saya jalankan dengan baik jika saya menentukan jalur absolut).

Saya juga memeriksa lndalam deklarasi saya aliasdan function, dan tidak ada apa-apa:

$ declare -f | grep ln
$ alias | grep ln

Masalahnya hanya terjadi dalam satu sesi bash. Jika saya memulai shell baru, itu berfungsi dengan baik lagi, tapi saya ingin tahu apa yang menyebabkan masalah ini tiba-tiba dalam sesi bash khusus ini.

Adakah gagasan tentang apa yang menyebabkan hal ini?

Jawaban:


10

Hati-hati saat menggunakan whichperintah. Lebih baik menggunakan type ...perintah.

$ type ln
ln is /bin/ln

Anda juga dapat menggunakan whereisperintah:

$ whereis ln
ln: /bin/ln /usr/share/man/man1p/ln.1p.gz /usr/share/man/man1/ln.1.gz

Kamu benar! Ketika saya menjalankan type lnsaya mendapatkan ln is hashed (/usr/local/.../ln)yang tampaknya menjadi masalah, tetapi apa artinya persis bahwa itu "hash"? Saya belum pernah mendengar fitur itu di bash.
etherice

3
@etherice - Bash memelihara hash (kunci = daftar nilai) dari nama perintah dan di mana letaknya. Anda dapat melihat daftar dengan hash -lperintah. Ini dibangun secara dinamis saat Anda menggunakan perintah.
slm

@etherice - Saya baru saja memutakhirkan pertanyaan Anda sehingga Anda hanya berjarak 4 poin 8-). Anda dapat menerima jawaban saat masalah Anda terselesaikan dan Anda merasa itu adalah jawaban terbaik.
slm

@etherice - ada orang lain baru saja menaikkan status Anda jadi sekarang Anda memiliki 16 poin.
slm

1
Terima kasih! Saya berlari hash -runtuk mengatur ulang hashtable command-to-path, dan lnsekarang kembali bekerja.
etherice
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.