将文件路径传递给使用cygstart打开的命令时转义空格

时间:2015-11-12 14:57:25

标签: cygwin

问题

运行以下命令时:

bash

传递给/usr/bin/bash: /home/FirstName: No such file or directory 的文件路径在空格处被切断,因此我收到以下错误:

cygstart bash "/home/FirstName LastName/bin/script.sh"

我尝试了什么:

1

FILE_PATH="/home/FirstName LastName/bin/script.sh"
cygstart bash "$FILE_PATH"

2

FILE_PATH="/home/FirstName LastName/bin/script.sh"
cygstart bash "${FILE_PATH}"

3

FILE_PATH="/home/FirstName LastName/bin/script.sh"
cygstart bash ${FILE_PATH}

4

FILE_PATH="/home/FirstName LastName/bin/script.sh"
MY_COMM=$(cygstart bash "$FILE_PATH")
eval $MY_COMM

5

cygstart

此外我还记不起其他六种变体,其中包括所有上面的反斜杠以逃避空间。错误总是一样的。

我缺少什么,或者甚至有办法解决这个问题?

更新:我在这种情况下使用--action=runas的原因是利用它的{{1}}选项。我调用的脚本重命名文件,但必须以管理员权限运行才能执行此操作。我的想法是,我可以调用脚本,然后输入相应的凭据。

1 个答案:

答案 0 :(得分:4)

对于测试,我在~/Test Dir/test.sh中创建了一个脚本。这对我有用:

cygstart bash \"/home/cxw/Test\ Dir/test.sh\"

开头和结尾的\"是独立的双引号,它将包含它们之间的内容以将它们作为一个参数保持在一起。

问题是参数被放入Windows ShellExecute function,这会在空白区域中分割出args。要查看正在运行的确切命令,请使用cygstart -v

以上结果是ShellExecute这样的调用:

ShellExecute(NULL, "(null)", "bash", ""/home/cxw/Test Dir/test.sh"", "(null)", 1)

请注意配对的双引号:外引号由cygstart -v打印,内部为\"以保持脚本名称。

我列出了/home/cxw而不是~,因为~对我不起作用。如果需要,可以使用cygpath -a获取绝对路径。