Как получить оригинальную системную команду после перезаписи ее функцией?

Я сейчас на хакатоне, поэтому, если кто-то ответит на это в ближайшее время, вы окажете мне огромную услугу.

Я написал функцию с именем ls () в моем .bashrc, которая выглядит следующим образом:

ls() {

  if(some condition);
    do something
  else
    ls; #(CALL TO ORIGINAL ls SYSTEM CALL)
  fi

}

Но здесь, когда она переходит к другой части, она просто входит в бесконечный цикл

Как я могу вызвать исходный системный вызов ls в else или как заставить ls вести себя по-разному в одной папке и обычно в других.

4
задан 16 June 2013 в 22:01

2 ответа

Вы также можете быть заинтересованы в which, который дает вам путь к программе в вашем $PATH с этим именем.

$ which ping
/bin/ping

(Хотя я бы порекомендовал ответ Найкакина, так как он решает вашу проблему. Это просто еще один инструмент для всех, кто заинтересован)

0
ответ дан 16 June 2013 в 22:01

Вы ищете command:

команда [-pVv] команда [arg ...]

Команда запуска с аргументами, подавляющими нормальный поиск функций оболочки. Выполняются только встроенные команды или команды, найденные в PATH. Если задана опция -p, поиск команды выполняется с использованием значения по умолчанию для PATH, которое гарантированно найдет все стандартные утилиты. Если указана опция -V или -v, выводится описание команды. Опция -v позволяет отображать одно слово, указывающее команду или имя файла, использованное для вызова команды; Опция -V дает более подробное описание. Если указана опция -V или -v, статус выхода равен 0, если команда найдена, и 1, если нет. Если ни одна из опций не указана, и произошла ошибка или команда не может быть найдена, статус выхода равен 127. В противном случае, статус выхода встроенной команды - это статус выхода команды.

Пример:

$ pwd() {
> echo 'command test'
> command pwd
> }
$ pwd
command test
/etc

Существует также builtin, что является более ограничительным:

встроенная оболочка-встроенная [аргументы]

[ 119] Выполнить указанную встроенную оболочку, передав ей аргументы, и вернуть ее состояние выхода. Это полезно при определении функции, имя которой совпадает со встроенной оболочкой, сохраняя функциональность встроенной функции. Встроенный CD обычно переопределяется таким образом. Статус возврата - false, если встроенная оболочка не является встроенной командой оболочки.

0
ответ дан 16 June 2013 в 22:01

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

Похожие вопросы: