2016-07-31 7 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] *' на самом деле * не кавычки * и подлежат глобулизации оболочкой, поэтому поведение зависит от того, есть ли имена файлов, начинающиеся с цифры в текущем каталоге. Я предлагаю использовать '' [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