0

我正在考虑为 cygwin 编写脚本以 cd 进入从 Windows 资源管理器复制的 Windows 目录。

例如

cdw D:\working\test

等于

cd /cygdrive/d/working/test

但似乎对于 shell 脚本,参数中的所有反斜杠都被忽略,除非使用单引号'D:\working\test'或双反斜杠D:\\working\\test

但就我而言,这将非常不便,因为我不能简单地将目录名称粘贴到命令行中来执行脚本。

有什么办法可以cdw D:\working\test工作吗?

4

3 回答 3

5

好吧,你可以做到,但你想要一些奇怪的东西:)

cdw()
{
    set $(history | tail -1 )
    shift 2
    path="$*"
    cd $(cygpath "$path")
}

使用示例:

$ cdw D:\working\test
$ pwd
/cygdrive/d/working/test

这里的重点是history. 您不直接使用参数,而是以输入的形式从历史记录中获取它。

$ rawarg() { set $(history | tail -1 ); shift 2; echo "$@"; }
$ rawarg C:\a\b\c\d
C:\a\b\c\d

当然,您只能在交互式 shell 中使用此技巧(原因很明显)。

于 2012-08-06T08:47:07.620 回答
1

您处理的问题与外壳有关。您在命令行上添加到 cdw 的任何参数都将在执行之前 cdw由 shell 处理。

为了防止该处理发生,您需要至少一级引用,或者通过将整个字符串括在单引号中:

cd 'D:\working\test'

或使用双反斜杠:

cd D:\\working\test

单独的程序将无济于事,因为损坏在运行之前就已经完成。;-)

但是,我有一个可能function的 for cdw,它适用于我的 AST UWIN ksh:

function cdw { typeset dir
    read -r dir?"Paste Directory Path: "
    cd ${dir:?}
}

这在 Bash 中有效(不支持读取 var?prompt):

function cdw {
    typeset dir
    printf "Paste Directory Path: "
    read -r dir || return
    cd ${dir:?}
}

Paste对我来说,我只需在d 值周围键入两个单引号。

于 2012-08-05T10:16:36.470 回答
0

添加单引号的解决方案允许复制粘贴

于 2012-08-05T07:55:32.063 回答