Найти расположение функции оболочки / bash на диске

Найти расположение функции оболочки / bash на диске

Если у меня есть такая функция:

    #!/usr/bin/env bash

    function foo {

    }

а указанная выше функция находится в .bash_profile или где-то еще.

Если я which fooего использую, он не даст мне местоположение этой команды в скрипте оболочки.

Есть ли способ узнать, где он находится, или это grepлучший вариант?

решение1

На этот вопрос уже был дан ответздесь. Итак, из этого факта можно вывести два вывода:

  1. Вам следует провести более тщательное исследование, прежде чем задавать здесь свой вопрос (хотя, что ж, все мы время от времени ленимся).
  2. Есть гораздо лучший трюк, чем grepделать то, что хочешь.

Таким образом, вы можете получить исходный файл и номер строки функции оболочки в вашем PATH следующим образом: (кредит:этот ответ)

# Turn on extended shell debugging
shopt -s extdebug

# Dump the function's name, line number and fully qualified source file  
declare -F foo

# Turn off extended shell debugging
shopt -u extdebug

решение2

whichищет только путь. Чтобы увидеть, что на самом деле выполняет bash, используйте встроенную команду type:

type foo

Связанный контент