如何使用带有自定义 bashrc 的 Git bash 运行脚本?

Posted

技术标签:

【中文标题】如何使用带有自定义 bashrc 的 Git bash 运行脚本?【英文标题】:How to run a script with Git bash with custom bashrc? 【发布时间】:2014-04-11 17:13:45 【问题描述】:

我试图让一个 bash 脚本在 git bash 中运行,同时指定一个与我的主目录中的不同的 .bashrc(或根本没有),但事实证明这是一项不可能完成的任务。

据我了解,这应该可行:

"C:\Program Files (x86)\Git\bin\sh.exe " --rcfile .bashrc --login -i C:/Scripts/myscript.sh

但是,无论我尝试什么,要么 --rcfile 文件标志将被完全忽略,要么脚本将出现解析错误,因为它没有被 bash 解析。

以下是我的发现:

--login 标志需要让脚本被 bash 而不是 windows 命令提示符解析 --rcfile 和--norc 如果使用--login 标志,将被完全忽略

我已经尝试了我想到的所有可能的组合,包括在我的 .bashrc 文件中调用脚本、交换标志、使用 -c 标志运行脚本命令以及交换我的 .bashrc 文件以尝试使用 - -norc 标志。

这只是 Windows 的糟糕 bash 实现的结果还是我做错了什么?

感谢您对此事的任何帮助。

【问题讨论】:

【参考方案1】:

您可以尝试在脚本myscript.sh 中获取您的.bashrc

source .bashrc

或者

. .bashrc

【讨论】:

谢谢,但它仍然运行我原来的 .bashrc【参考方案2】:

据我所知,-i 标志被您提供了一个供bash 运行的脚本这一事实所覆盖。您的外壳实际上不是交互式的,因此 --rcfile 被忽略。我可以告诉同时运行脚本 获取附加文件的唯一方法是使用非交互式登录 shell;但是,在这种情况下,您只能使用 .bash_profile.bash_login.profile,以先找到者为准:

bash --login myscript.sh

没有--loginfile 可以覆盖myscript.sh 之前来源的文件选择。


更新:我忘了BASH_ENV

export BASH_ENV=.bashrc
bash myscript.sh

我不知道您将如何在 Git bash 中将 BASH_ENV 添加到您的环境中。

【讨论】:

也许只是使用Windows的set命令;但它的范围是当前会话(我认为;或者可能它只是不支持的),所以如果你也将 Bash 用于其他事情,你不能使用它。 好的,我明白你的意思了。我设法创建了一个 .bash_profile ,它检查当前目录中是否存在 .bashrc 文件,并从主目录中获取该文件,但问题是,如果主目录中的文件名为 .bashrc,它当我启动 shell 时总是尝试使用它,所以我不得不给它起个不同的名字,所以只有 .bash_profile 中的代码运行。发生这种情况有什么原因吗?

以上是关于如何使用带有自定义 bashrc 的 Git bash 运行脚本?的主要内容,如果未能解决你的问题,请参考以下文章

配置开机自启命令文件~/.bashrc/etc/profile/etc/bash.bashrc的异同(bashrc:Bash Run Commands)

配置开机自启命令文件~/.bashrc/etc/profile/etc/bash.bashrc的异同(bashrc:Bash Run Commands)

在 Git Bash 中运行 .sh 脚本

如何使用自定义命令为每个屏幕启动多个屏幕?

将语义应用于自定义 git 流

我的自定义bashrc