У меня следующая проблема:
#!/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
"account" - это файл с обычными адресами электронной почты, по одному в каждой строке.
backup_maildir - это ожидаемый скрипт.
Когда выполняется основной сценарий, 6-я строка успешно отображает текущий почтовый адрес, но следующая строка не передает эту строку в сценарий backup_maildir. Если переменная $ account - это user@domain.com, строка, которая передается в backup_maildir, будет {user@domain.com?}?! Как такое возможно? Как это решить?
да какой сумасшедший сценарий :) давай попробуем вот так :)
#!/bin/bash
cat accounts | while read account
do
echo -e "\n Account: $account \n";
echo sudo ./backup_maildir "$account";
done
если все выглядит нормально и строка sudo работает вне сценария, как и ожидалось, отбросьте эхо и вуаля
Вы можете добавить строку вроде set -x
в вашем скрипте в верхней части или непосредственно перед вашей командой sudo, чтобы увидеть гораздо больше подробной информации на консоли о том, как выглядят переменные и какие команды запускаются. Я подозреваю, что ваша переменная проходит, вы просто неправильно ее обрабатываете.
Вы также можете попробовать процитировать переменную в такой строке: «$ account» на случай, если у нее есть пробелы или другие неожиданные вещи, но в этом случае реальным решением будет очистка ваших данных.
Ваша проблема может заключаться в конфигурации sudo в / etc / sudoers. для передачи параметров вам может потребоваться настроить sudo, чтобы разрешить это.
Читать
man sudoers
и найдите там значение по умолчанию и параметры.