在 zsh 中,通过括号创建的子 shell 可以有一个 rcfile 作为源来使用可能是别名的命令,仅在向其中添加特定目录时可用PATH
,等等:
~ » /bin/zsh -c "workon"
zsh:1: command not found: workon
------------------------------------------------------------
~ » /bin/zsh -c "source ~/.zshrc; workon"
env1
env2
env3
... (expected output)
然而,对于 bash 来说情况并非如此:
~ » /bin/bash -c "workon"
/bin/bash: workon: command not found
------------------------------------------------------------
~ » /bin/bash -c "source ~/.bashrc; workon"
/bin/bash: workon: command not found
------------------------------------------------------------
~ » bash
sean@helium:~$ workon
env1
env2
env3
... (expected output)
有没有什么方法可以让 bash 子 shell 获得 rcfile 呢?
为了抢先了解“XY 问题”的响应,这里有一个名为的脚本in
:
#!/bin/zsh
(source ~/.zshrc; cd $1; ${@:2})
我有一个充满项目的目录(使用 git),我经常忘记是否留下任何未提交的内容,因此in
允许我快速写入$ in ProjectDir/ git status
,而不是$ (cd ProjectDir; git status)
(前者感觉比后者更容易输入)。
最好的情况下,我希望这个脚本可以在 bash 中使用(这就是我问的原因,尽管它目前可以在 zsh 上使用)。
答案1
在我的 Kubuntu 中,第一件事.bashrc
是这样的:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
我猜你的.bashrc
也类似。这就是为什么/bin/bash -c "source ~/.bashrc; …"
“不”引用。如果你使用,bash -i -c …
那么.bashrc
将自动引用,而你的source
将不必要地第二次解析它。