Bash'de kaç farklı yol "takma ad" oluşturabilirsiniz?


10

Sadece iki yol biliyorum: alias foo=barve function foo() { bar }.

Sormamın lnsebebi - bash oturumlarımdan birinde aniden - komutu çalıştıramıyorum çünkü bashhata veriyor -bash: /usr/local/.../ln: No such file or directory(burada ortam değişkenimdeki /usr/local/.../girişlerden biri PATH).

Gerçi bu bir PATHsorun değil , çünkü Ben çalıştırırsam which ln, beklenen ikilik çıktılar /usr/bin/ln(mutlak yolu belirtirseniz iyi çalışabilirim).

Ayrıca lnbenim aliasve functionbeyanlarda kontrol ve hiçbir şey yok:

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

Sorun sadece bir bash oturumunda meydana geliyor. Yeni bir kabuk başlatırsam, yine iyi çalışır, ancak bu özel bir oturumda aniden bu soruna neyin neden olduğunu bilmek istiyorum.

Buna neyin sebep olabileceğine dair bir fikrin var mı?

Yanıtlar:


10

whichKomutu kullanırken dikkatli olun . type ...Komutu kullanmak daha iyi .

$ type ln
ln is /bin/ln

Ayrıca şu whereiskomutu da kullanabilirsiniz :

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

Haklısın! Ne zaman koşmak type lnolsun ln is hashed (/usr/local/.../ln)sorun gibi görünüyor, ama tam olarak "hashed" ne anlama geliyor? Bu özelliği bash'da hiç duymadım.
etherice

3
@etherice - Bash, komutun adının ve bulunduğu yerin karma değerini (anahtar = değer listesi) tutar. Listeyi hash -lkomutla görebilirsiniz. Komutları kullandıkça dinamik olarak oluşturulur.
slm

@etherice - Sorunuzu yeni onayladım, böylece sadece 4 puan uzaktasınız 8-). Sorununuz çözüldüğünde yanıtı kabul edebilirsiniz ve bunun en iyi yanıt olduğunu düşünüyorsunuz.
slm

@etherice - orada başka biri sizi oyladı, bu yüzden şimdi 16 puanınız var.
slm

1
Teşekkürler! hash -rKomut-yol karma değerini sıfırlamaya çalıştım ve lnşimdi çalışma düzenine geri döndüm.
etherice
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.