【问题标题】:Configuring Cygwin for ConEmu with different start directory使用不同的启动目录为 ConEmu 配置 Cygwin
【发布时间】:2014-02-27 23:58:23
【问题描述】:

我在 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 中添加新路径的操作指南。也许你们中的一个可以启发我。

【问题讨论】:

    标签: windows path cygwin 64-bit conemu


    【解决方案1】:

    首先,您是否查看过您的 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
    

    您可能会在项目wiki page 中找到另一种解决方法。

    【讨论】:

    • 我不认为这是 bash 的错误。如果您使用参数“-l”或“--login”执行 bash,它将作为 login shell 执行。这意味着它处理“配置文件”文件并将工作目录更改为“/etc/passwd”中定义的用户主目录。如果你在没有参数“-l”或“--login”的情况下执行bash,它将在正常模式下执行,不处理“profile”文件并保留当前工作目录。这与它在 Linux 中的工作方式完全相同。
    • 添加了正确的解决方案和描述
    【解决方案2】:

    我有类似的需求(通过上下文菜单在资源管理器中当前查看的文件夹中打开一个新的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}
    

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

    ConEmu 任务 {Cygwin}

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



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

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2015-09-17
      • 2018-03-19
      • 2014-03-01
      • 1970-01-01
      相关资源
      最近更新 更多