como usar o bash para executar o mesmo comando com um grupo de variáveis?

0

Eu quero executar todos esses comandos dentro de um arranjo melhor, o que devo fazer?

# bash script of "copyall.sh"
scp /local/michael.txt [email protected]:~/
scp /local/jason.txt [email protected]:~/
scp /local/jerry.txt [email protected]:~/
scp /local/wong.txt [email protected]:~/
scp /local/lee.txt [email protected]:~/
scp /local/mark.txt [email protected]:~/

Por exemplo, seria muito fácil de fazer via JavaScript. Eu só preciso colocar os nomes em uma matriz ou objeto e para essa matriz / objeto. Mas e com o bash?

    
por AGamePlayer 05.02.2015 / 16:32

2 respostas

4

Você não precisa de nenhuma variável aqui.

scp /local/michael.txt /local/jason.txt /local/jerry.txt \
    /local/wong.txt /local/lee.txt /local/mark.txt       \
    [email protected]:~/

Você também pode usar a expansão de chaves:

scp /local/{michael,jason,jerry,wong,lee,mark}.txt [email protected]:~/
    
por 05.02.2015 / 16:36
1

Você pode usar uma construção for em bash também:

for name in michael jason jerry wong lee mark; do
    scp "/local/${name}.txt" [email protected]:~/
done

Isso executa a linha scp uma vez por nome, substituindo ${name} pelo nome atual.

bash também suporta matrizes explícitas, pelo que pode fazê-lo:

names=( michael jason jerry wong lee mark )
for name in "${names[@]}"; do
    scp "/local/${name}.txt" [email protected]:~/
done

Como apontado na resposta da @ choroba scp suporta vários parâmetros para que você possa fazer isso de forma mais eficiente em um único comando.

    
por 05.02.2015 / 16:35

Tags