繁体   English   中英

[:关于Cygwin Shell脚本的参数太多了

[英][: too many arguments on Cygwin Shell script

我继承了一些编写的shell脚本来进行自动化性能测试,而没有任何shell脚本知识。 我浏览了几个指南并玩弄了这个语言,直到我可以完成我的项目。 它大部分进展顺利,但我坚持一些我无法在其他地方找到答案的东西。

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

不幸的是,当通过ssh传递脚本时,以及在Windows系统上通过Cygwin执行脚本时,脚本都会出现问题。

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

收益率:

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

然后分支到not-windows逻辑。 在我试过的任何Linux发行版上,同样的东西似乎运行正常。

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

感谢您的时间,我很乐意提供任何有用的信息。

麻烦的条款是逐字复制的,剩下的就是SO。

我尝试了你的命令,它在bash 4.2.37上没有错误地执行。

它也可以在没有方括号或后退的情况下工作 - if测试下一个命令的返回代码...你可以使用test命令,也可以拼写[ ,但它也可以使用返回代码grep或者甚至:这总是如此。

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

注意,还有一个bash环境变量$OSTYPE ,它在Linux下是linux-gnu

这里有一个深入的讨论: 从Bash脚本中检测操作系统

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上的等效名称 - 并避免多参数问题,只运行一个命令而不是两个命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM