[英]bash script to recursively run commands on directories depending on the pattern of the directory name
[英]Bash script to run commands if in directory
目标:如果在目录中,自动执行 bash 命令。
例如,如果我进入git
项目目录,我希望 bash 为我运行以下命令:
我尝试附加到~/.bashrc
,但没有运气:
...
if [ -f "/home/me/PycharmProjects/project/" ]; then
conda activate project_venv
export KEY=foo
export SECRET=bar
fi
~/.bashrc
:
# ...
cd () {
command cd "$@" &&
if [[ $(pwd) = '/home/me/PycharmProjects/project1' ]]; then
conda activate project1
~/miniconda3/etc/activate.d/env_vars.sh
elif [[ $(pwd) = '/home/me/PycharmProjects/project2' ]]; then
conda activate project2
else
~/miniconda3/etc/deactivate.d/env_vars.sh
fi
}
激活 conda 环境有效!
但是, export
不起作用。
~/miniconda3/etc/activate.d/env_vars.sh
:
#!/bin/sh
export KEY=foo
export SECRET=bar
~/miniconda3/etc/deactivate.d/env_vars.sh
:
#!/bin/sh
unset KEY
unset SECRET
我跑了:
chmod 777 ~/miniconda3/etc/activate.d/env_vars.sh
chmod 777 ~/miniconda3/etc/deactivate.d/env_vars.sh
当我在任何项目中运行代码时,我得到:
decouple.UndefinedValueError: KEY not found. Declare it as envvar or define a default value.
您可以将此 function 添加到您的~/.bashrc
:
cd () {
command cd "$@" &&
if [[ $(pwd) = '/home/me/PycharmProjects/project' ]]; then
conda activate project_venv
export KEY=foo SECRET=bar
fi
}
您可以设置PROMPT_COMMAND
,请参阅 bash 文档。 Bash 在每次提示之前执行它的值(或者如果它是一个数组,它的每个值),所以当PWD
改变时你可以做任何你想做的事情。
因为您要在 function 中导出,所以您需要使用declare -gx
declare --help
将为您提供最好和最准确的原因,但这是因为所有 function 变量在技术上都是local
。 如果不在 function 中,则忽略-g
为 function 创建全局导出变量,并且-x
是export
的别名。 export
只是declare -x
。 您还需要获取脚本文件
所以它看起来像这样
declare -gx KEY=foo
declare -gx SECRET=bar
cd () {
command cd "$@" &&
if [[ $(pwd) = '/home/me/PycharmProjects/project1' ]]; then
conda activate project1
source ~/miniconda3/etc/activate.d/env_vars.sh
elif [[ $(pwd) = '/home/me/PycharmProjects/project2' ]]; then
conda activate project2
else
source ~/miniconda3/etc/deactivate.d/env_vars.sh
fi
}
完全披露我不确定-x
是否完全必要,但我会在采购脚本的情况下这样做。
同样将秘密存储在~/.bashrc
中也是一个普遍的禁忌,因为它会导致不良行为者获取秘密。 除了减慢交互式 shell 加载时间之外
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.