首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在FZF预览窗口中显示Bash函数

无法在FZF预览窗口中显示Bash函数
EN

Unix & Linux用户
提问于 2022-10-21 15:10:50
回答 1查看 224关注 0票数 0

How我是否从当前的Bash环境中获得FZF预览窗口来显示函数?

我希望使用FZF列出我的自定义bash函数,并在FZF预览窗口中查看所选函数的代码。

但是,FZF用于执行我的命令的bash环境似乎看不到我的终端bash环境中的函数。例如:

代码语言:javascript
复制
$ declare -F | fzf --preview="type {3}"

/bin/bash: line 1: type: g: not found

然而,以下工作:

代码语言:javascript
复制
$ 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。

代码语言:javascript
复制
$ echo $BASHPID

1129439

$ declare -F | fzf --preview="echo $BASHPID"

1208203

How我是否从当前的Bash环境中获得FZF预览窗口来显示函数?

EN

回答 1

Unix & Linux用户

发布于 2022-11-17 15:10:28

您需要导出您的函数,以便它们可以被子subshells继承。下面是一个例子:

代码语言:javascript
复制
#!/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}"
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/721921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档