配置 Console2 在当前文件夹中打开 bash

Big*_*uge 4 windows-registry cygwin bash context-menu console2

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

Title: bash.exe
Shell: C:\cygwin\bin\bash.exe --login -i
Startup dir: %HOMEDRIVE%%HOMEPATH%
Run Code Online (Sandbox Code Playgroud)

这是我的注册表项:

Directory
    shell
        Console2
            Open Console2 Here
            command
                "C:\Console2\Console.exe" -d "%1"
Run Code Online (Sandbox Code Playgroud)

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

我也尝试过这个解决方案,但它对我也不起作用:

Title: bash.exe
Shell: C:\cygwin\bin\bash.exe -l
Run Code Online (Sandbox Code Playgroud)

注册表:

Directory
    shell
        Console2
            Open Console2 Here
            command
                "C:\Console2\Console.exe" -d "%V"
Run Code Online (Sandbox Code Playgroud)

上述解决方案适用于 Git 包含的 bash.exe 和 sh.exe 版本,但由于某种原因不适用于 cygwin 包含的版本。还在找这个原因。

编辑

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

Hug*_*len 5

手册中

当 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
Run Code Online (Sandbox Code Playgroud)

因此,一种解决方案是创建一个 Windows 批处理文件,CHERE_INVOKING在启动 bash 之前设置环境变量。那不是很整洁。

下一个,

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

默认情况下,这些配置文件脚本会执行您的~/.bashrc脚本(如果存在)。把cd -我的.bashrc作品放在最后(使用最新的 Console2 和 Cygwin bash):

echo 'cd -' >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

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