[英][: 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.