В Ubuntu 14.04 описание терминала для rxvt-unicode-256color
является частью пакета ncurses-term, а описание для rxvt-unicode
является частью ncurses -база
.
ncurses-base
является важным пакетом, а ncurses-term
- нет. Вы можете решить вашу проблему, установив ncurses-term
.
Отличное решение @icarus работает для функций, до тех пор, пока они определены буквально, а не являются результатом eval
содержимого другого файла (в котором файл с eval
будет отображаться как источник). Он не будет печатать исходный файл с псевдонимами, встроенными модулями оболочки (например, echo
) и исполняемыми файлами (двоичными или нет), и я считаю, что эта информация недоступна в целом. Некоторые команды могут распечатывать свои исходные файлы (и даже могут быть правдивыми) либо в ходе нормального выполнения, либо в ответ на сигнал.
__ git_ps1
определено в /usr/share/git/git-prompt.sh
и /usr/share/git/completion/git-prompt.sh
на моя система, Arch Linux, может быть, и у вас будет то же самое.
Взгляните на раздел Invocation в man bash
, если вы хотите найти команды, специально созданные в начале оболочки - они могут быть источником других файлов, которые, в свою очередь, являются источником других файлов. файлы.
Кажется, это невозможно в bash
, но это есть в zsh
:
$ type __git_ps1
> __git_ps1 is a shell function from /usr/share/git/git-prompt.sh
Объявите функцию с тем же именем и установите ее как можно раньше только для чтения, затем активируйте режим xtrace, например:
__git_ps1(){ :;}
readonly -f __git_ps1
set -x
После этого, когда вы войдете в систему, вы увидит информацию трассировки, которая включает источники файлов. В момент попытки объявления существующей функции только для чтения вы увидите сообщение об ошибке. Последний исходный файл перед ним должен содержать искомую декларацию.
Возможно, вам потребуется поместить это в системный профиль bash. Также не забудьте отменить изменения после обнаружения виновника.
Вы пробовали это?
grep -rnw '/path/to/somewhere/' -e "pattern"
или любую из других команд, найденных здесь:
Как мне найти все файлы, содержащие определенный текст, в Linux? | Stack Overflow
Кажется, мне нужно дать вам больше объяснений. В вашем вопросе задается вопрос: "" Таким образом, если вы запустите следующую команду, она должна вернуть все файлы, в которых определена функция bash.
grep -rnw 'Path2Search' -e "#!/bin/bash"
Программирование на BASH - Функции | Проект документации Linux
Если вы готовы запустить функцию, вы можете получить информацию, используя set -x
для отслеживания выполнения и установив переменную PS4
.
Запустите bash с - debugger
или используйте shopt -s extdebug
для записи дополнительной отладочной информации.
Установите PS4
, «подсказка» выводится при трассировке, чтобы показать исходную строку.
Включите отслеживание.
затем вы можете запустить свою функцию, и для каждой строки вы получите имя файла функции.
используйте set + x
, чтобы выключить трассировку.
Итак, в этом случае вы должны запустить
bash --debugger
PS4='+ ${BASH_SOURCE[0]} '
set -x ; __git_ps1 ; set +x
Если вы не хотите запускать функцию, вы все равно можете настроить отладку и получить информацию. Шаги:
bash --debugger
или shopt -s extdebug
до определения функции. объявите -F __git_ps1
, и он сообщит, где определена функция.
Преимущества этого метода по сравнению с просмотром аннотированной трассировки выполнения с помощью PS4:
Преимущества трассировки выполнения:
Я настоятельно настоятельно рекомендую иметь shopt -s extdebug
в начале обоих ~ /. bashrc
и ~ / .bash_profile
для покрытия различных файлов , используемых в различных случаях вызова .