windows - [ : too many arguments on Cygwin Shell script

标签 windows bash shell ssh cygwin

我在没有任何 shell 脚本知识的情况下继承了一些 shell 脚本来进行自动化性能测试。我浏览了一些指南并尝试使用该语言,直到我可以完成我的项目。大部分进展顺利,但我卡在了一些我绝对无法在其他任何地方找到答案的问题上。

部分旧代码通过 ssh 连接到用于测试的服务器,并以脚本作为参数。我需要这个脚本在 Windows 和 Linux 上做不同的事情。到目前为止,我最好的解决方案是在 uname -a 的输出中对 Cygwin 进行 grep,如果找到,则执行 Windows 代码。

不幸的是,脚本在通过 ssh 传递时以及在 Windows 系统上通过 Cygwin 执行时都会崩溃。

#!/bin/bash
if [ `uname -a | grep "Cygwin"` ]; then
    echo "ARRGG WINDOWS!"
else
    echo "Some Linux command."
fi

产量:

./test.sh: 第 2 行:[: 参数过多

然后分支到非windows逻辑。同样的事情似乎在我尝试过的任何 Linux 发行版上运行良好。

我剩下三个问题。为什么我会得到这个异常,除了谷歌搜索之外,还有什么好的方法可以让我得到像这样的超特定问题的答案(shell 脚本、Cygwin、ssh 和一个错误之间的交集),还有更好、更规范的方法吗测试平台?

感谢您抽出时间,我很乐意提供任何有帮助的额外信息。

麻烦的条款被逐字复制,剩下的补上SO。

最佳答案

Cygwin 上 uname -a 的输出将是很多单词,包括 Cygwin。每个单词都是 test(又名 [)的参数。因此投诉。你可能想要:

case "$(uname -a)" in
(*Cygwin*) echo "Oh bother!";;
(*)        echo "Phew!";;
esac

或:

if [ -n "$(uname -a | grep Cygwin)" ]
then echo "Oh bother!"
else echo "Phew!"
fi

或:

if [ $(uname) = Cygwin ]
then echo "Oh bother!"
else echo "Phew!"
fi

这会得到 Cygwin 或 Linux——或 Mac OS X 上的 Darwin,以及 AIX、Solaris、HP-UX 上的等效名称——并避免了多参数问题,并且只运行一个命令而不是两个。

关于windows - [ : too many arguments on Cygwin Shell script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16094356/

相关文章:

windows - 在 Docker(适用于 Windows)中,如何在构建镜像时批量添加注册表项?

linux - Bash - 在多个目录中添加符号链接(symbolic link)

python - 如何将 pip 与多个 python 实例一起使用

regex - shell grep,正则表达式查找特定事件

windows - 带有小时和分钟的 robocopy MAXAGE/MINAGE 值

c++ - 如何使用 C++ 获取有关 Windows 可执行文件 (.exe) 的信息

c - 未声明的 WinApi Commctrl 轨迹栏标识符

python - 卸载旧版本并安装新版本后运行新 Python 版本时出现问题 (MAC)

bash - Bash 如何在不同的目录上下文中执行命令?

linux - 如何从 sh 脚本运行 csh 脚本