我想用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
从常见问题解答,强调我的:
- direnv 没有将 加载
.envrc
到当前 shell 中。它正在创建一个新的 bash 子进程来加载 stdlib、direnvrc 和.envrc
,并且仅将环境差异导出回原始 shell。这使得 direnv 能够准确记录环境变化,并且可以与各种 shell 一起使用。这也意味着别名和 函数目前不可导出。
使用导出函数export -f seqchart
可能也不起作用,因为我认为 bash 没有提供一种设置与导出函数 ( BASH_FUNC_foo%%
) 相同形式的环境变量的方法,即使它提供了,我认为它也只在启动时读取这些变量。