运行以下命令时:
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}}选项。我调用的脚本重命名文件,但必须以管理员权限运行才能执行此操作。我的想法是,我可以调用脚本,然后输入相应的凭据。
答案 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
获取绝对路径。