Скільки різних способів можна створити "псевдонім" у Bash?


10

Я знаю лише два способи: alias foo=barі function foo() { bar }.

Причина, про яку я запитую, полягає в тому, що - раптом на одному з моїх сеансів bash - я не можу запустити lnкоманду, тому що bashпомиляється з -bash: /usr/local/.../ln: No such file or directory(де /usr/local/.../є одна із записів у моїй PATHзмінній оточення).

Це не PATHпроблема, тому що якщо я запускаю, which lnвін виводить очікуваний двійковий код /usr/bin/ln(який я можу виконати добре, якщо вкажу абсолютний шлях).

Я також перевірив lnу своїх aliasі functionдеклараціях, і нічого немає:

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

Проблема виникає лише за один баш-сеанс. Якщо я запускаю нову оболонку, вона знову справно працює, але я хочу знати, що спричинило цю проблему раптом у цьому конкретному сеансі баш.

Будь-які ідеї щодо того, що може бути причиною цього?

Відповіді:


10

Будьте обережні, використовуючи whichкоманду. Краще використовувати type ...команду.

$ type ln
ln is /bin/ln

Ви також можете скористатися whereisкомандою:

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

Ти правий! Коли я бігаю, type lnя отримую ln is hashed (/usr/local/.../ln)проблему, але що це означає, що це "хеш"? Я ніколи не чув про цю особливість в басі.
etherice

3
@etherice - Bash підтримує хеш (ключ = список значень) імені команди та де він знаходиться. Ви можете побачити список за допомогою hash -lкоманди. Він динамічно будується під час використання команд.
slm

@etherice - Я просто підтримав ваше запитання, тож у вас всього 4 бали 8-). Ви можете прийняти відповідь, коли проблема вирішена, і ви вважаєте, що це найкраща відповідь.
slm

@etherice - там хтось тільки тебе схвалив, тож тепер у тебе 16 балів.
slm

1
Дякую! Я побіг hash -rскинути хеш-пам'ять команд до контуру і lnзараз повернувся до робочого стану.
etherice
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.