使用不同的启动目录配置Cygwin和ConEmu

4

我正在使用ConEmu 64位和Cygwin 64位在Windows 7机器上。

我不想在我的.bashrc中设置cygwin的工作目录,因为我想为Cygwin设置多个任务并具有不同的路径参数。

我在任务参数中设置了“主目录”:

\dir "D:\Downloads\Programming\Selenium\"

然后在命令窗口中添加了这一行:

C:\cygwin64\Cygwin.bat --login -i

然而,Cygwin并没有在“cygwinized”版本的给定目录(/cygdrive/d/Downloads/Programming/Selenium)中启动,而是在我的用户的“正常”主目录(~)中启动。

我只找到了如何在bashrc中添加新路径的教程。或许你们中的一位可以为我指点迷津。

2个回答

5

首先,您是否查看了C:\cygwin64\Cygwin.bat的内容?为什么不呢?

@echo off
C:
chdir C:\cygwin64\bin
bash --login -i

显然,Cygwin.bat 永远不会在您想要的目录中打开 bash。
此外,Cygwin 忽略用户定义的启动目录! 这是因为 Cygwin 总是从 /etc/profile 脚本中执行 cd "${HOME}"
例如,来自 msysgit 的 bash 可以正常工作。
解决方法 然而,/etc/profile 脚本在执行 CD 前会检查 CHERE_INVOKING 环境变量。因此,正确的启动 cygwin 的命令行将是:
set CHERE_INVOKING=1 & c:\cygwin64\bin\sh.exe --login -i

您可以在项目的维基页面中找到其他解决方法。


我认为这不是bash的错误。如果您使用参数“-l”或“--login”执行bash,则会作为登录shell执行。这意味着它会处理“profile”文件并将工作目录更改为在“/etc/passwd”中定义的用户主目录。如果您不使用参数“-l”或“--login”执行bash,则以正常模式执行,不处理“profile”文件并保留当前工作目录。这与Linux中的工作方式完全相同。 - David Ferenczy Rogožan
已添加适当的解决方案和描述。 - Maximus

0

我有一个类似的需求(通过上下文菜单在当前资源管理器中查看的文件夹中打开新的Cygwin-Tab),并找到了以下解决方案:

正如Maximus所述,Cygwin-Bash通常是通过C:\ cygwin64 \ Cygwin.bat打开的,其中包括登录过程。我的方法是通过登录更改工作目录。

.bash_profile:

if [ -f "${HOME}/startup.sh" ] ; then
  source "${HOME}/startup.sh"
fi


startup.sh

cdc "D:\Downloads\Programming\Selenium\"
#cdc is a custom function, see .bashrc


.bashrc

cdc()
{
   # converts a double-quoted windows-path and changes directory to it
   p=$(cygpath -u "$1")
   cd "$p"
}

登录进程会将您的bash路径更改为在startup.sh中设置的路径。当然,您也可以在startup.sh中输入Cygwin兼容路径而不使用.bashrc的自定义函数。这仍然非常有用,特别是如果您想要使用动态startup.sh。


更多动态方法:

在C:\ opt \ ConEmu \ ConEmu中创建一个名为Cygwin.bat的文件,并包含以下内容:

Cygwin.bat

@echo off

C:
echo cdc %1 > C:\opt\cygwin64\home\%USERNAME%\startup.sh 

:: Your ConEmu-Task-definition here
C:\opt\ConEmu\ConEmu64.exe /Single /cmd {Cygwin}

这个命令会在你的startup.sh中写入一个cdc命令,后面跟着你提供的路径,并启动一个新的ConEmu-Task Cygwin实例。该任务本身并不做任何事情,只是在我的配置中启动Cygwin的一个实例:

ConEmu Task {Cygwin}

"C:\opt\cygwin64\Cygwin.bat"



我通过资源管理器的上下文菜单调用Cygwin.bat。另一种方法是创建一个Windows快捷方式,指向附加了路径的Cygwin.bat。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接