which
- внешняя команда, поэтому она не имеет доступа к встроенным командам, функциям или псевдонимам текущей оболочки. Фактически, по крайней мере, в моей системе /usr/bin/which
- это сценарий оболочки, поэтому вы можете изучить его и посмотреть, как он работает.
Если вы хотите узнать, как интерпретирует вашу оболочку, используйте type
, а не which
. Если вы используете bash, type -a
напечатает все возможные значения в порядке очередности. Подробнее см. В документации вашего корпуса.
Для большинства корпусов встроенные команды имеют приоритет над командами в вашем $PATH
. Например, все, что имеет встроенный echo
, заключается в том, что он быстрее, чем загрузка /bin/echo
в память.
Если вы хотите, чтобы ваша собственная команда echo
переопределяла встроенный в оболочку echo
, вы можете определить его как функцию оболочки.
С другой стороны, переопределение встроенной команды echo
не является для меня хорошей идеей. Если он ведет себя так же, как встроенный echo
, то не так много смысла. Если это не так, то это может сломать скрипты, которые используют echo
, ожидая, что он будет работать определенным образом. Если возможно, я предлагаю дать вам команду по-другому. Если это расширенная версия echo
, вы можете даже назвать ее Echo
.
Вы пытались выполнить свою программу с ./ перед тем, как заявить, что это файл bash в текущем каталоге? Если вы не в этом текущем каталоге, вы можете поместить путь от корня до сценария оболочки. –
Возможно, эхо-скрипт не может быть в CWD, это одна из веских причин, почему вы можете добавить его в путь. – ssnobody
'echo'is - встроенная команда оболочки. Другими словами, никакого файла 'echo' вообще нет, это все' bash' или что-то еще. –