Вы можете использовать awk
для этого:
file=$(declare -F my_bash_func | awk '{print $3}')
Или используйте встроенные в bash -ins, прочитайте их в массив:
func_info=( $(declare -F my_bash_func) )
file=${func_info[2]}
line_number=${func_info[1]}
Но имейте в виду, что вывод declare -F my_bash_func
не очень удобен для синтаксических анализаторов... Если файл, содержащий функцию, получен по относительному пути, вывод extdebug
просто напечатает относительный путь (, даже если вы re больше не в этом каталоге. )Кроме того, если в пути есть пробелы или непечатаемые символы, они будут сохранены в выводе (, так что "3-е поле" может быть неверным...)
1 )Вы используете терминал Kitty? У него есть проблема, когда он добавляется к выбору, а не заменяет его. Это все еще происходит в Terminal.app или iTerm2?
2 )Или вы используете как pbcopy
, так и set-clipboard
, чтобы tmux установил системный буфер обмена? Попробуйте set -s set-clipboard off
в .tmux.conf
и перезапустите tmux(tmux kill-server
).
@Nicholas Marriot предоставил информацию, которая привела меня к этому решению:
https://unix.stackexchange.com/a/564333/406997
В моем случае я использовал pbcopy
, а не xsel
:
set -s set-clipboard off
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "pbcopy"