How我是否从当前的Bash环境中获得FZF预览窗口来显示函数?
我希望使用FZF列出我的自定义bash函数,并在FZF预览窗口中查看所选函数的代码。
但是,FZF用于执行我的命令的bash环境似乎看不到我的终端bash环境中的函数。例如:
$ declare -F | fzf --preview="type {3}"
/bin/bash: line 1: type: g: not found
然而,以下工作:
$ declare -F
declare -f fcd
declare -f fz
declare -f g
$ type g
g is a function
g ()
{
search="";
for term in $@;
do
search="$search%20$term";
done;
nohup google-chrome --app-url "http://www.google.com/search?q=$search" > /dev/null 2>&1 &
}
declare -F | fzf --preview="echo {3}"
g # my function g()我怀疑FZF预览窗口环境可能无法看到我的终端环境的一个原因是它们有不同的进程ID。
$ echo $BASHPID
1129439
$ declare -F | fzf --preview="echo $BASHPID"
1208203How我是否从当前的Bash环境中获得FZF预览窗口来显示函数?
发布于 2022-11-17 15:10:28
您需要导出您的函数,以便它们可以被子subshells继承。下面是一个例子:
#!/usr/bin/env bash
header_info='CTRL+D or ESCAPE to exit, ENTER attaches to a Detached screen'
export FZF_DEFAULT_COMMAND="list_screens"
export FZF_DEFAULT_OPTS="--info=inline --header '${header_info}' --preview 'screen_peek {1}' --preview-window top,80%,follow "
function screen_peek() {
local screen=$1
local pipe="/tmp/${RANDOM}-$(date +%s).peek"
mkfifo "${pipe}"
screen -S "${screen}" -X hardcopy "${pipe}"
cat "${pipe}" | sed -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;};/\n$/ba'
rm -f "${pipe}"
}
function list_screens() {
screen -ls | column -t | grep tached
}
export -f screen_peek
export -f list_screens
screen_id=$(list_screens | fzf | awk '{print $1}')
[[ "${screen_id}" ]] && screen -x "${screen_id}"https://unix.stackexchange.com/questions/721921
复制相似问题