我有一个下面的问题:
#!/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默认和参数。