Так, для себя
передача нескольких параметров через xargs
cat users_maildir_size | xargs -n 2 sh -c 'echo "$0" `expr \( "$1" + 50000 \) / 1000`' > user_quota
где users_maildir_size представляют из себя набор строк из двух слов, разделенных пробелом - имени пользователя и размером его почтовой директории
затем мы передаем через xargs два параметра, рассчитываем (там косяк был в том, что не проставили квоты нескольким пользователям, поэтому пришлось ограничивать, исходя из текущей загрузки) и выводим в файл
все работает, параметры передаются.
к сожалению, никакие игры со всеми видами кавычек, экранирования и пр. для передачи параметров в mysql к результатам не привели :(
cat user_quota | xargs -I {} -n 2 sh -c 'mysql -h server database -ppass -Be "select quota from mailbox where addr like '{$1}@mail%';"'
подобная конструкция НЕ РАБОТАЕТ!!!!
пришлось сформировать файл, содержащий все команды для mysql (для каждого пользователя)
cat mysql_commandы | xargs -I {} sh -c 'mysql -h server database -ppass -e "{}"'
и при этом все равно экранировать в файле апострофы обратными слешами
select addr,quota from mailbox where addr like \'ivanova@mail%\' and quota=0;
забавно, что без экранирования при выполнении xargs -t апострофы показываются в передаче в mysql, но, видимо, теряются по дороге, потому как сама команда при этом не выполняется :)
а вот такая конструкция (пусть и с одной переменной) работает
cat mail_addr2del | xargs -I {} mysql -h server database -ppass -e 'update mailbox set state=-1 where addr like "{}" ; '
Комментариев нет:
Отправить комментарий