2012-08-07 50 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