如何在Fish Shell中实现Bashrc式的当前目录环境变量导出?
Fish Shell 中动态设置 AIRFLOW_HOME 的解决方法
你的问题核心在于:Fish 的 config.fish 是Shell 启动时一次性执行的,里面的 $(pwd) 会固定取启动 Shell 时的工作目录,后续切换目录后变量不会自动更新。而你需要的是让 AIRFLOW_HOME 跟随当前工作目录变化,或者每次执行 airflow 时自动使用当前目录下的 airflow 文件夹。
针对这个需求,有两种可行方案:
方案一:切换目录时自动更新 AIRFLOW_HOME
在 config.fish 中添加一个目录切换的钩子函数,每次切换目录时重新设置 AIRFLOW_HOME:
function chpwd set -x AIRFLOW_HOME "$PWD/airflow" end
chpwd是 Fish 内置的特殊函数,每次切换工作目录时会自动执行- 这样无论你切换到哪个目录,
AIRFLOW_HOME都会同步更新为当前目录下的airflow文件夹
方案二:包装 airflow 命令(推荐)
如果你不需要全局的 AIRFLOW_HOME 变量,只是希望执行 airflow 时自动使用当前目录的 airflow,可以给 airflow 写一个包装函数,在执行命令前临时设置环境变量:
function airflow set -x AIRFLOW_HOME "$PWD/airflow" command airflow $argv end
command airflow确保调用的是真正的airflow命令,避免递归调用自己- 这个方案只会在执行
airflow时临时设置变量,不会影响全局环境
补充:关于你的测试问题
你测试的 set -x $TEST $PWD 写法有误,正确的变量赋值应该是 set -x TEST $PWD(不需要加 $ 在变量名前面)。但即使写法正确,这个赋值也是一次性的,切换目录后变量不会自动变化,这正是上面两个方案要解决的问题。
内容的提问来源于stack exchange,提问作者Roku
相关产品推荐
相关产品推荐

