2016-07-31 23 views
0
☿[~]$ alias hdd='echo Σ= $(($(df -BMB /dev/sdb1 --output=used | tail -1 | grep -o '[0-9]*')+$(df -BMB /dev/sdc1 --output=used | tail -1 | grep -o '[0-9]*'))) Mb' 

Bash的錯誤,這個別名突然停止做的工作:用 '+' 操作數//行情濫用

☿[~]$ hdd 
bash: +: syntax error: operand expected (error token is "+") 

但命令仍然有效:

☿[~]$ echo Σ= $(($(df -BMB /dev/sdb1 --output=used | tail -1 | grep -o '[0-9]*')+$(df -BMB /dev/sdc1 --output=used | tail -1 | grep -o '[0-9]*'))) Mb 
Σ= 3782845 Mb 
+0

'突然停止'是指'以前工作'? – sjsam

+4

您試圖以不起作用的方式嵌套引號操作符(整個別名周圍的撇號以及正則表達式周圍的撇號)。因此,你的'[0-9] *'實際上是*不加引號的*並且受shell的通配,所以行爲取決於當前目錄中是否有以數字開頭的文件名。我建議使用'「[0-9] *」'代替,因爲撇號和引號之間的區別對於正則表達式中的字符無關緊要。 –

+0

sjsam,是的,它在系統更新之前工作。 –

回答

5

不要使用別名;定義一些功能。

get_space_used() { 
    df -BMB "$1" --output=used | tail -1 | grep -o '[0-9]*' 
} 
hdd() { 
    sdb1=$(get_space_used /dev/sdb1) 
    sdc1=$(get_space_used /dev/sdc1) 
    echo "$((sdb1 + sdc1))" 
} 

這使得報價更容易,refactors重複的代碼,使得它更容易找出問題是在一個錯誤的事件是什麼。在你的情況下,第二個df管道有問題,因爲bash試圖執行類似echo $((foo +))的事情。

+0

完美建議++ – sjsam