2012-08-07 35 views
0

我有一個bash文件,我想通過sudo crontab列表進行切換。問題是,這是行不通的,因爲當我運行sudo的腳本,對這一行語法錯誤消息:sudo bashfile使語法錯誤

size=(`du -h $backupDir --summarize`) 

如果我沒有運行相同的腳本,我必須鍵入sudo的PW ,但它工作沒有任何問題。 我已經嘗試了一些帶括號的變體,有或沒有反引號,有或沒有空格等,但沒有任何幫助。錯誤信息是:

Syntax error: "(" unexpected (expecting ";;") 

任何幫助?

+0

腳本是否有bash shebang? '#!/ usr/bin/env bash'或者至少'#!/ bin/bash'? '('在bash中是有效的,並且應該從命令的輸出創建一個數組。 – c00kiemon5ter 2012-08-07 10:28:18

+0

也好像你沒有正確地關閉'case'語句,因此'期待'''發佈你的腳本會有所幫助。 – c00kiemon5ter 2012-08-07 10:29:48

+0

#!/ bin/bash是問題;)所有正確關閉的case語句:/ – Simons0n 2012-08-07 11:45:07

回答

4

這裏的問題是,你使用bash語法,和腳本(當它是從cron執行的)被解釋爲/bin/sh(對陣列和()構造沒有任何知識)。

必須要麼使用她爆炸符號指定bash爲腳本的解釋:

#!/bin/bash 

或明確地bash從cron運行腳本:

bash /path/to/script 

或重寫劇本如此,它可以運行沒有數組。

0

來回可讀性使用$()形式

size=$(du -h $backupDir --summarize) 

如果你要堅持反引號,然後

size=`du -h $backupDir --summarize` 
+0

你最好引用這兩個。 ''size =「\'cmd --args \'」;''size =「$(cmd --args)」' – c00kiemon5ter 2012-08-07 10:25:22

+0

@ c00kiemon5ter - 雖然這並沒有傷害,但它並不需要在變量的右側分配。 – jordanm 2012-08-07 15:19:06