Если у меня есть такая функция:
#!/usr/bin/env bash
function foo {
}
а указанная выше функция находится в .bash_profile или где-то еще.
Если я which foo
его использую, он не даст мне местоположение этой команды в скрипте оболочки.
Есть ли способ узнать, где он находится, или это grep
лучший вариант?
решение1
На этот вопрос уже был дан ответздесь. Итак, из этого факта можно вывести два вывода:
- Вам следует провести более тщательное исследование, прежде чем задавать здесь свой вопрос (хотя, что ж, все мы время от времени ленимся).
- Есть гораздо лучший трюк, чем
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