Passando problema de variáveis - Bash

2

Eu tenho um problema a seguir:

#!/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

"contas" é um arquivo com endereços de e-mail regulares, um em cada linha. backup_maildir é esperar script.

Quando o script principal é executado, a sexta linha exibe o endereço de e-mail atual, mas a linha a seguir não está passando essa cadeia para o script backup_maildir. Se a variável $ account for [email protected], uma string passada para backup_maildir será {[email protected]?}! Como isso é possível? Como resolver isso?

    
por Boban P. 24.02.2011 / 12:52

3 respostas

10

huh que script louco :) vamos tentar assim:)

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

se tudo parecer bem e a linha sudo funcionar fora do script, como esperado, elimine o eco e voila

    
por 24.02.2011 / 13:08
1

Você pode adicionar uma linha como set -x em seu script perto do topo ou um pouco antes do comando sudo para ver muito mais informações detalhadas no console sobre quais variáveis se parecem e quais comandos estão sendo executados. Eu suspeito que sua variável está sendo passada, você simplesmente não está lidando bem com isso.

Você também pode tentar citar o var na linha assim: "$ account" no caso de ter espaço em branco ou outras coisas que são inesperadas, mas se esse fosse o caso, a solução real seria limpar seus dados. / p>     

por 24.02.2011 / 13:08
0

Seu problema pode ser a configuração do sudo em / etc / sudoers. para passar parâmetros você pode precisar configurar o sudo para permitir isso.

Leia

man sudoers

e pesquise por padrão e parâmetros.

    
por 24.02.2011 / 13:08