传递variables的问题 – Bash

我有一个下面的问题:

#!/bin/bash NUM=`cat accounts | wc -l`; for i in {1..$NUM} do account=`awk "NR==$i" accounts`; echo -e "\nAccount: $account\n"; sudo ./backup_maildir $account; done 

“帐户”是一个具有常规电子邮件地址的文件,每行一个。
backup_maildir是期望的脚本

当主脚本执行时,第6行成功地回显当前邮件地址,但是下面的行不会将该string传递给backup_maildir脚本。 如果$ accountvariables是[email protected],那么传递给backup_maildir的string是{[email protected]?}?! 这怎么可能? 如何解决?

呵呵是什么疯狂的脚本:)让我们试试这样:)

 #!/bin/bash cat accounts | while read account do echo -e "\n Account: $account \n"; echo sudo ./backup_maildir "$account"; done 

如果一切看起来都很好,sudo line就像预期的那样运行脚本,那就放弃echo和voila

你可以在你的脚本的顶部附近或者在你的sudo命令之前添加一行,比如set -x ,以便在控制台上看到更多关于什么variables看起来像什么以及哪些命令正在运行的详细信息。 我怀疑你的variables是通过了,你只是没有处理它的权利。

你也可以尝试在这样的行中引用var:“$ account”,以防万一它有空白或其他意想不到的事情,但是如果是这样的话,真正的解决scheme就是清理你的数据。

你的问题可能是/ etc / sudoers中的sudoconfiguration。 为了传递参数,你可能需要configurationsudo来允许它。

 man sudoers 

并在那里search默认和参数。