【问题标题】:escaping spaces and other special characters in cygwin shell script在 cygwin shell 脚本中转义空格和其他特殊字符
【发布时间】:2013-09-05 15:52:51
【问题描述】:

我正在努力尝试让脚本在 cygwin 上运行。这是我正在尝试运行的脚本的最新版本:

$ cat start_vm_2.sh
#!/bin/sh

VMRUN='/cygdrive/c/\"Program Files (x86)\"/VMware/VMware\ VIX/vmrun"'
echo "VMRUN is [$VMRUN]"
ARGS='-T ws start \"C:\\Users\\red\\Documents\\Virtual Machines\\myvm-dev-006 \(2\)\\myvm-dev-006 \(2\).vmx\"'
echo "ARGS is [$ARGS]"

这是我收到的错误消息:

$ ./start_vm_2.sh
VMRUN is [/cygdrive/c/\"Program Files (x86)\"/VMware/VMware\ VIX/vmrun"]
ARGS is [-T ws start \"C:\\Users\\red\\Documents\\Virtual Machines\\myvm-dev-006 \(2\)\\myvm-dev-006 \(2\).vmx\"]
./start_vm_2.sh: line 8: /cygdrive/c/\"Program: No such file or directory

【问题讨论】:

  • 我没有 cygwin,但在 Linux 中,我只需将单引号替换为双引号并删除反斜杠..VMRUN="cygdrive/c/Program Files (x86)/VMware/VMware VIX/vmrun".

标签: windows shell cygwin


【解决方案1】:

您应该将其作为 bash 运行,并将您的参数存储为数组。另外,不要在空格中添加文字引号:

#!/bin/bash
VMRUN="/cygdrive/c/Program Files (x86)/VMware/VMware VIX/vmrun"
echo "VMRUN is [$VMRUN]"
ARGS=(-T ws start 'C:\Users\red\Documents\Virtual Machines\myvm-dev-006 (2)\myvm-dev-006 (2).vmx')
echo "ARGS is [${ARGS[*]}]"
"$VMRUN" "${ARGS[@]}"

运行bash script.sh

【讨论】:

    【解决方案2】:

    这可能是你的问题......我遇到了同样的问题,直到我发现我的脚本有 Windows 特殊字符(cat -e script.ksh)......所以我对文件做了一个 dos2unix,它开始随心所欲地流动

    希望对你有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 2021-01-02
      相关资源
      最近更新 更多