Псевдоним не переопределяет записи 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, поэтому она может создавать псевдонимы.