BASH Operações em um objeto for loop

0

Estou tentando executar um comando bash em um objeto forloop, mas ele está tentando procurar um arquivo em vez de usar o objeto forloop.

Exemplo:

O arquivo de entrada contém linhas no formato user:password

for item in $(cat myItems);do
        USER = cat $item | cut -d ":" -f1
        PASS = cat $item | cut -d ":" -f2
done

O resultado disso é que ele diz que o arquivo $ item não foi encontrado

Eu também tentei

for item in $(cat myItems);do
        USER = $(cat $item | cut -d ":" -f1)
        PASS = $(cat $item | cut -d ":" -f2)
done
    
por Anthony Russell 04.12.2016 / 22:57

2 respostas

3

Isso parece ser o que você procura e segue a abordagem de script que você pretendia originalmente.

$ cat myItems
user:pass
user2:pass2
$ for item in $(cat myItems);do
    USER=$(echo $item | cut -d ":" -f1)
    PASS=$(echo $item | cut -d ":" -f2)
    echo user $USER pass $PASS
done
user user pass pass
user user2 pass pass2
$
    
por 04.12.2016 / 23:20
5

Se você realmente precisa executar algum comando para cada linha do arquivo, você escreveria:

while IFS=: read -r user password rest_ignored; do
  something with "$user" and "$password"
done < myItems

cat é o comando para concatenar arquivos, a sintaxe de atribuição é var=value sem espaços em torno de = . $(...) pode dividir a saída de um comando na nova linha, mas somente se você definir $IFS corretamente e desativar a globulação.

    
por 04.12.2016 / 23:36