Сколько разных способов вы можете создать «псевдоним» в 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

Проблема только происходит в одной сессии bash. Если я запускаю новую оболочку, она снова работает нормально, но я хочу знать, что вызвало эту проблему внезапно в этой конкретной сессии bash.

Любые идеи относительно того, что может быть причиной этого?

Ответы:


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)что, кажется, является проблемой, но что это означает именно, что это "хешируется"? Я никогда не слышал об этой функции в Bash.
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.