我一直在尝试将一个简单的程序启动器与终端和 fzf 拼凑在一起以绑定到热键,但我无法在程序启动后关闭终端窗口而不终止子进程。我是 shell 的初学者,所以我可能错过了关键的一步。
到目前为止我尝试过的:
urxvtc -name menu -e bash -c 'compgen -c | sort -u | fzf | sh
它被命名为 menu,因此它可以在特殊规则下生成,我必须执行 -e bash 因为我的 shell (zsh) 无法识别 compgen。
一位不和谐的人建议:
urxvt -name menu -e bash -c 'cmd=$(compgen -c | sort -u | fzf); setsid $cmd'
这确实将窗口与其启动的程序分离,但是当 fzf 计算并输出到标准输出时,我找不到使终端窗口自动关闭的方法。
答案1
我不确定这是否正是您正在寻找的,但将 fork 参数添加到setsid(-f)似乎对于非终端命令非常有用:
urxvt -name menu -e bash -c 'cmd=$(compgen -c | sort -u | fzf); setsid -f $cmd'