Я сейчас на хакатоне, поэтому, если кто-то ответит на это в ближайшее время, вы окажете мне огромную услугу.
Я написал функцию с именем ls () в моем .bashrc, которая выглядит следующим образом:
ls() {
if(some condition);
do something
else
ls; #(CALL TO ORIGINAL ls SYSTEM CALL)
fi
}
Но здесь, когда она переходит к другой части, она просто входит в бесконечный цикл
Как я могу вызвать исходный системный вызов ls в else или как заставить ls вести себя по-разному в одной папке и обычно в других.
Вы также можете быть заинтересованы в which
, который дает вам путь к программе в вашем $PATH
с этим именем.
$ which ping
/bin/ping
(Хотя я бы порекомендовал ответ Найкакина, так как он решает вашу проблему. Это просто еще один инструмент для всех, кто заинтересован)
Вы ищете command
:
команда [-pVv] команда [arg ...]
Команда запуска с аргументами, подавляющими нормальный поиск функций оболочки. Выполняются только встроенные команды или команды, найденные в PATH. Если задана опция -p, поиск команды выполняется с использованием значения по умолчанию для PATH, которое гарантированно найдет все стандартные утилиты. Если указана опция -V или -v, выводится описание команды. Опция -v позволяет отображать одно слово, указывающее команду или имя файла, использованное для вызова команды; Опция -V дает более подробное описание. Если указана опция -V или -v, статус выхода равен 0, если команда найдена, и 1, если нет. Если ни одна из опций не указана, и произошла ошибка или команда не может быть найдена, статус выхода равен 127. В противном случае, статус выхода встроенной команды - это статус выхода команды.
blockquote>Пример:
$ pwd() { > echo 'command test' > command pwd > } $ pwd command test /etc
Существует также
builtin
, что является более ограничительным:встроенная оболочка-встроенная [аргументы]
[ 119] Выполнить указанную встроенную оболочку, передав ей аргументы, и вернуть ее состояние выхода. Это полезно при определении функции, имя которой совпадает со встроенной оболочкой, сохраняя функциональность встроенной функции. Встроенный CD обычно переопределяется таким образом. Статус возврата - false, если встроенная оболочка не является встроенной командой оболочки.BLOCKQUOTE>