切换 git 分支时从 .bash_profile 重新加载 bash 脚本

Reload bash script from .bash_profile when switching git branches

我厌倦了为我正在进行的任何故事分支 (Git) 寻找 Jira 门票,所以我制作了这个小脚本并将其放在我的 .bash_profile 中。

alias ojt="open https://mycompanyname.atlassian.net/browse/MARMO-"$(git symbolic-ref HEAD | sed s/[^0-9]*//g)""

在我切换分支之前工作正常: git checkout 1234

切换分支后,我使用 ojt 别名命令,它从 我所在的上一个分支 .

打开 Jira 票证

如果我重新加载 source ~/.bash_profile,它会起作用。我不想重新加载整个配置文件。

试试这个:

alias ojt="open https://mycompanyname.atlassian.net/browse/MARMO-"'$(git symbolic-ref HEAD | sed s/[^0-9]*//g)'

如果您将子 shell ($(...)) 放在双引号中或不带引号,它将立即被评估(即无论何时您获取 .bash_profile)。如果您将它用单引号括起来,它将被延迟评估(即每当您调用别名时)。

实际上,由于您不需要立即扩展任何其他值,您应该能够将整个内容放在单引号中:

alias ojt='open https://mycompanyname.atlassian.net/browse/MARMO-$(git symbolic-ref HEAD | sed s/[^0-9]*//g)'

请注意,如果您混合使用扩展值和惰性值,则必须将字符串与不同的引号连接起来才能起作用;如果你只是嵌套它们,你的字符串中会得到额外的引号字符,最外层的引号集将用于确定是否扩展变量和子shell。

示例:

VAR=abc
echo "$VAR $VAR"     # abc abc
echo '$VAR $VAR'     # $VAR $VAR 
echo "$VAR '$VAR'"   # abc 'abc'
echo '$VAR "$VAR"'   # $VAR "$VAR"
echo "$VAR "'$VAR'   # abc $VAR