传递变量问题 - Bash

传递变量问题 - 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

“accounts” 是一个包含常规电子邮件地址的文件,每行一个。backup_maildir
是预期脚本。

执行主脚本时,第 6 行成功回显当前电子邮件地址,但下一行未将该字符串传递给 backup_maildir 脚本。如果 $account 变量是[电子邮件保护],传递给 backup_maildir 的字符串是 {[电子邮件保护]?} ?! 这怎么可能?该如何解决?

答案1

哈,多么疯狂的脚本啊:)让我们试试这样:)

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

如果一切正常,并且 sudo 行按预期运行,则删除 echo 并瞧瞧

答案2

您可以在脚本顶部附近或 sudo 命令之前添加一行,set -x以便在控制台上查看有关变量的样子和正在运行的命令的更多信息。我怀疑您的变量确实被传递了,只是您没有正确处理它。

您还可以尝试像这样在行中引用 var:“$account”,以防它有空格或其他意外的东西,但如果是这种情况,真正的解决方案是清理您的数据。

答案3

您的问题可能是 /etc/sudoers 中的 sudo 配置。为了传递参数,您可能需要配置 sudo 以允许它。

man sudoers

并在那里搜索默认值和参数。

相关内容