如何从 .envrc 中创建 bash 函数?

如何从 .envrc 中创建 bash 函数?

我想用direnv当我切换到特定目录时自动定义 bash 函数。这是函数定义。

seqchart () {
    # Create a sequence diagram creation shorthand
    f=$1
    target_f=${f%.*}.svg
    if [ -f "$f" ]; then
        diagrams sequence $f ${target_f}
        open -a firefox ${target_f}
    else
        echo "$0: No file specified"
    fi
}

我把上面的代码放到了.envrc.

当我cd进入文件夹时,我可以看到

$ cd sequence_diagrams/
direnv: loading .envrc

但 bash 函数没有创建。

我怎样才能在将所有内容都集中在一起的情况下实现这一目标.envrc

答案1

常见问题解答,强调我的:

  1. direnv 没有将 加载.envrc到当前 shell 中。它正在创建一个新的 bash 子进程来加载 stdlib、direnvrc 和 .envrc,并且仅将环境差异导出回原始 shell。这使得 direnv 能够准确记录环境变化,并且可以与各种 shell 一起使用。这也意味着别名和 函数目前不可导出。

使用导出函数export -f seqchart可能也不起作用,因为我认为 bash 没有提供一种设置与导出函数 ( BASH_FUNC_foo%%) 相同形式的环境变量的方法,即使它提供了,我认为它也只在启动时读取这些变量。

相关内容