在 Bash 中的括号子 shell 中获取 rcfile 吗?

在 Bash 中的括号子 shell 中获取 rcfile 吗?

在 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将不必要地第二次解析它。

相关内容