2012-12-11 58 views
2

我試圖寫一個bash腳本,將使用win-bash的窗戶邊Mac和Windows上運行,因爲它沒有安裝。但是,Mac和Windows似乎對語法有不同的意見。二元運算符預計在雙贏的bash

例如,我有以下腳本迄今:

echo "Setup..." 
shopt -s expand_aliases #make sure aliases work 
if [ "$(uname)" == "Darwin" ]; then 
    alias p4cli=./bin/p4 
else 
    alias p4cli=p4 
fi 

echo "Checking login status..." 
p4cli groups > .trash 
if [ $? -ne 0 ]; then 
    p4cli login 
fi 
echo "Done!" 

這種失敗:

[: ==: binary operator expected 

在窗口(WIN-的bash),但(只是罰款在Mac上,我」因爲它實際上是Unix)將會假設更爲正確。

的,我做錯了什麼在這裏的任何想法?

+0

我敢打賭,你沒有在Windows環境中的'uname' CMD。最好使用'set -vx'和'set + vx'關閉shell調試/跟蹤功能。然後你可以看到每個cmd都是在變量替換的情況下執行的。祝你好運。 – shellter

+0

實際上,共贏的bash包括UNAME –

+0

'CMD;如果[$? -ne 0];那麼......'更習慣性地寫'如果cmd;那麼......或者簡單地說'cmd || ......如果後備是一個簡單的單一動作。 – tripleee

回答

2

嘗試單=代替雙==

if [ "$(uname)" = "Darwin" ]; then 

他們都指的是內部測試的字符串相等檢查,但比較單一的等號是POSIX兼容的,而雙等號是沒有 - 它只適用於當前的bash/ksh作爲可讀性的語法糖(對於較舊的shell也會失敗)。

+0

賓果:)就是這樣。謝謝! –