4

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

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

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

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

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

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

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

我只找到了关于如何在 bashrc 中添加新路径的方法。也许你们中的一个可以启发我。

4

2 回答 2

5

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

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

显然,Cygwin.bat永远不会在您想要的目录中打开 bash。


此外,Cygwin 忽略用户定义的启动目录!那是因为 cygwin 总是cd "${HOME}"/etc/profile脚本中执行。

但是,例如,来自msysgit的 bash可以正常工作。


解决方案

但是,/etc/profile脚本在执行之前会检查CHERE_INVOKING环境变量CD。因此,启动 cygwin 的正确命令行将是:

set CHERE_INVOKING=1 & c:\cygwin64\bin\sh.exe --login -i

您可以在项目wiki 页面中找到另一种解决方法。

于 2014-02-28T05:13:14.467 回答
0

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

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

.bash_profile:

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


启动.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}

这会写入一个 cdc-command,后跟您在 startup.sh 中提供的路径,并启动 ConEmu-Task Cygwin的一个新实例。任务本身除了在我的配置中启动一个 Cygwin 实例之外什么都不做:

ConEmu 任务 {Cygwin}

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



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

于 2014-06-25T16:55:43.793 回答