我正在尝试使用run
从Cygwin调用本机Windows命令,但是当它发生时,命令(我从注册表中获取)已经引用了几个部分:
"C:\path\to\file.exe" -- "some argument"
如果我从终端使用run "C:\path\to\file.exe" -- "some argument"
,它可以正常工作,但是只要我把它放在Bash脚本中,它就会尝试转义双引号并在整个事物周围添加单引号,它毁了它:
\"C:\path\to\file.exe\" -- \"some argument\"
如果在尝试运行命令之前放入echo
,它会显示预期的命令,但run
命令失败。
echo $command
run $command
我对bash脚本很新,所以我希望我缺少一些基本的东西:)
更新:我觉得我对单引号感到困惑。
更新:以下是该脚本的相关部分:
command=`cat /proc/registry/hkey_classes_root/http/shell/open/command/@`
command=${command/"%1"/$target}
run $command
以下是我为响应SiegeX的建议而尝试的内容:
command=`cat /proc/registry/hkey_classes_root/http/shell/open/command/@`
command=(${command/"%1"/$target})
run "${command[@]}"
我还尝试cmd /c
作为run
的替代方案,结果相同(来自终端,但不是脚本)。
答案 0 :(得分:2)
这对我有用:
command=$(< /proc/registry/hkey_classes_root/http/shell/open/command/@)
command=${command//\"/}
command=$(cygpath "$command")
command=${command/\%1/$target}
eval run $command
答案 1 :(得分:0)
引用$command
,如下所示:run "$command"
如果这不起作用,请尝试:
#!/bin/bash
cmd=("C:\path\to\file.exe" "--" "some argument")
run "${cmd[@]}"