bash 中的 export -f 根本没有像我预期的那样工作。无法将函数导出到 bash 子进程

问题描述 投票:0回答:1

这是我的脚本,它真的很简单。有人告诉我,这应该有效,而且这个脚本也适用于其他人。但是它对我不起作用,我不知道为什么。我只是希望能够定义函数并使它们可供子进程访问,但我已经无法在比我愿意承认的时间更长的时间之后让它工作。

#!/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 中定义说无效选项。我没想到这首先会起作用,但仍然想看看行为是否存在差异。

bash function subprocess export
1个回答
2
投票

execute()
操作使用
$SHELL
环境变量中的默认 shell。如果这是
zsh
它不会继承
bash
功能。所以你需要明确地执行带有
bash
的命令。

fzf --bind "enter:execute(bash -c 'copy {}')"

另一种选择是将环境变量设置为

bash

SHELL=/bin/bash fxf --bind "enter:execute(copy {})"
© www.soinside.com 2019 - 2024. All rights reserved.