Команда 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 с разрешениями пользователя.