我见过这但它对我不起作用。我没有使用 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 选项卡中的“启动目录”选项留空。