这是我的脚本,它真的很简单。有人告诉我,这应该有效,而且这个脚本也适用于其他人。但是它对我不起作用,我不知道为什么。我只是希望能够定义函数并使它们可供子进程访问,但我已经无法在比我愿意承认的时间更长的时间之后让它工作。
#!/usr/bin/env bash
copy() {
notify-send "Copied"
}
export -f copy
fzf --bind "enter:execute(copy {})"
当我尝试用其他命令替换我定义的函数时也是如此。无论我使用哪个 shell 运行它,它的运行方式如何,它都会发生
./fzf.sh
或
. ./fzf.sh
或
source "$HOME/path/fzf.sh" && bash -c "$HOME/path/fzf.sh"
我尝试添加“set -x”并使用 xtrace 运行它,但出现了这个错误:
addr2line: fzfclip.sh: file format not recognized
以及相同的“zsh:1:command not found”,无论它是从 bash 会话还是 zsh shell 会话调用的。我真的很困惑。我也尝试过将 shebang 也更改为 #!/bin/bash 并且我也尝试使用 sh 和 zsh 来查看是否有任何变化并且 sh 显然失败了因为它没有在 posix 和 zsh 中定义说无效选项。我没想到这首先会起作用,但仍然想看看行为是否存在差异。
execute()
操作使用 $SHELL
环境变量中的默认 shell。如果这是 zsh
它不会继承 bash
功能。所以你需要明确地执行带有bash
的命令。
fzf --bind "enter:execute(bash -c 'copy {}')"
另一种选择是将环境变量设置为
bash
:
SHELL=/bin/bash fxf --bind "enter:execute(copy {})"