Назад | Перейти на главную страницу

Проблема с передачей переменных - 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

"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

и найдите там значение по умолчанию и параметры.