编辑

编辑

我见过但它对我不起作用。我没有使用 Git 版本的 bash,而是使用 cygwin 自带的版本,所以这可能是问题的一部分。以下是我在 Console2 中设置选项卡的方式:

Title: bash.exe
Shell: C:\cygwin\bin\bash.exe --login -i
Startup dir: %HOMEDRIVE%%HOMEPATH%

这是我的注册表项:

Directory
    shell
        Console2
            Open Console2 Here
            command
                "C:\Console2\Console.exe" -d "%1"

bash 总是从我的主目录启动,而不是从我单击的目录启动,然后我必须cd /cygdrive/d/code......等等。我尝试删除“启动目录”字段中的值,将其更改为 %1,%1%,但没有成功。

我也试过此解决方案但它对我也不起作用:

Title: bash.exe
Shell: C:\cygwin\bin\bash.exe -l

注册表:

Directory
    shell
        Console2
            Open Console2 Here
            command
                "C:\Console2\Console.exe" -d "%V"

上述解决方案适用于 Git 附带的 bash.exe 和 sh.exe 版本,但由于某种原因,不适用于 cygwin 附带的版本。仍在寻找原因。

编辑

我选择了下面的答案,但我认为如果我在正确的文件夹中创建了 .profile 文件,上面的第二个解决方案就会起作用。我一直试图在我的正常主目录中创建它,而不是在 cygwin 使用的主目录中创建它,这就是它从未执行脚本的原因。这让我相信 .profile 文件是不必要的。我选择的答案(感谢 Hugh!)清楚地解释了 bash 如何使用每个脚本(.bash_profile、.bash_login、.profile 和 .bashrc),这帮助我弄清楚我把它们放在了错误的位置。

答案1

来自手动的

当 Bash 作为交互式登录 shell 或带有 --login 选项的非交互式 shell 调用时,它首先从文件 /etc/profile 读取并执行命令(如果该文件存在)。

/etc/profile默认包含以下代码:

# Make sure we start in home unless invoked by CHERE
if [ ! -z "${CHERE_INVOKING}" ]; then
  unset CHERE_INVOKING
else
  cd "${HOME}" || echo "WARNING: Failed attempt to cd into ${HOME}!"
fi

因此,一种解决方案是创建一个 Windows 批处理文件,CHERE_INVOKING在启动 bash 之前设置环境变量。但这并不好用。

下一个,

读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个存在且可读的文件读取并执行命令。

~/.bashrc如果存在,这些配置文件脚本将默认执行您的脚本。cd -在我的工作结束时.bashrc(使用最新的 Console2 和 Cygwin bash):

echo 'cd -' >> ~/.bashrc

顺便说一句,我调用 Console2 ( Console.exe) 时没有使用任何参数 - Windows 资源管理器确保它在我右键单击的目录中启动。我使用的是 XP,但我怀疑 MS 会在 Windows 的更高版本中更改此行为。我还将 Bash 选项卡中的“启动目录”选项留空。

答案2

似乎您还没有创建~/.profile以下内容:

cd -

https://superuser.com/a/387273/139371

相关内容