簡體   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