在作为第一个参数传递给bash.exe的路径上打开Cygwin

时间:2012-11-18 00:20:12

标签: batch-file cygwin console2 cygpath

我为实现这一目标而疯狂​​。我在Stack Overflow上阅读了很多问题,但是它们没有用。我正在尝试在console2上打开一个选项卡,该选项卡在作为参数传递给它的路径上打开Cygwin。

对于cmd.exe,非常简单:

cmd.exe %1

对于Cygwin来说,这看起来很难:

bash --login -i -c 'cd `cygpath \'D:\Program Files\'`;exec bash'

这里的问题是,如果路径没有空格,它可以很好地工作,有空格,它不起作用。另外,我不知道如何传递一个参数,可能是$ 1或%1?

修改1:

几乎那里,我创建了这个应该直接运行而不是直接运行bash.exe的批处理文件:

@echo off

set CHERE_INVOKES=%CD%
set TORUN="D:\Program Files\Cygwin\bin\bash.exe" --login -i -c 'cd "%CHERE_INVOKES%"; exec bash'
echo %TORUN%
call %TORUN%
PAUSE

这适用于除C :(和D :)之外的所有路径,原因是什么? Windows是愚蠢的,而不是有一个名为C:的路径,它有一个名为C的路径:!!!所以,虽然所有路径都以结束而没有反斜杠,但第一条路径以此结束,让我发疯!

2 个答案:

答案 0 :(得分:1)

以下是解决方案:

@echo off

set CHERE_INVOKES=%CD%
::Remove trailing slash if required
IF %CHERE_INVOKES:~-1%==\ SET CHERE_INVOKES=%CHERE_INVOKES:~0,-1%

set TORUN="D:\Program Files\Cygwin\bin\bash.exe" --login -i -c 'cd "%CHERE_INVOKES%"; exec bash'

call %TORUN%

我在此问题中添加了此代码:Remove Trailing Slash From Batch File Input

::Remove trailing slash if required
IF %CHERE_INVOKES:~-1%==\ SET CHERE_INVOKES=%CHERE_INVOKES:~0,-1%

通过这种方式,我可以使用此批处理文件在当前路径上打开Console2 Cygwin。

答案 1 :(得分:1)

以下命令适用于我:

c:\cygwin\bin\bash --login -i -c "cd '%~1'; exec /bin/bash.exe"

%~1扩展%1,删除任何周围的引号(“) - 在命令提示符中查看help for

另见:Cygwin中的 chere 包,以及 ConEmu 终端:)