Псевдоним не переопределяет записи PATH?

Последняя строка моего .bash_profile является:

alias cp=/usr/local/bin/gcp

Однако это подавляется записью в моем $PATH:

$which cp
/bin/cp
11:54:32/OCspark $type cp
cp is aliased to `/usr/local/bin/gcp'

Я думал, что псевдонимы перекрывают PATH..?

2 ответа

Решение

which Команда возвращает только исполняемые файлы: она ничего не знает о псевдонимах, так как это внешняя программа, и нет механизма для передачи информации о псевдонимах дочернему процессу.

Если вы введете команду type -a cp Вы увидите все возможные интерпретации в порядке предпочтения. Это включает в себя любой псевдоним, так как type это bash внутренняя команда.

Важно понимать, что псевдоним не будет интерпретироваться подпроцессом, таким как сценарий или интерактивный редактор, который имеет возможность запускать системные команды.

Если вы делаете cp функция, тогда ваша версия будет работать в сценариях, но не из других программ:

cp() { /usr/local/bin/gcp "$@"; }

Если вы хотите, чтобы ваш cp работать везде, добавить $HOME/bin во главе вашего PATH список и точка $HOME/bin/cp указать на это:

ln -s /usr/local/bin/gcp $HOME/bin/cp

Это делает символическую ссылку, хотя вы можете сделать ее немного более эффективной жесткой ссылкой (пропустите -s), но для этого обычно требуются права суперпользователя (sudo ln ...). Создание функции и добавление к PATH переменная будет сделано в одном из bash сценарии запуска, с разрешениями пользователя.

Псевдонимы являются внутренними для оболочки. Другие программы не будут знать о них.

which не является встроенной функцией Bash (это встроенная функция в некоторых других оболочках, например, в zsh). поскольку which не имеет привилегированной информации в псевдонимах Баша, which просто просматривает PATH на данный срок.

typeс другой стороны , это встроенная функция Bash, поэтому она может создавать псевдонимы.

Другие вопросы по тегам