Como percorrer as variáveis

0

Eu tenho um comando no meu script csh que pode dar pelo menos 2 linhas de saída, mas pode ser mais. Estou transformando essas linhas em variáveis separadas que, em seguida, quero passar para outro comando. Como faço para definir meu segundo comando para percorrer e executar para cada variável gerada pelo comando 1? Abaixo está o que eu tenho que transforma a saída do comando 1 em variáveis.

set vars = 'echo "command 1"'

set numRows = $#vars  
if ($numRows < 2) then  
        echo "ERROR! $numRows rows!"  
        exit  
endif  


'echo '/command2 -L '$vars[1]''
    
por a.smith 16.12.2016 / 15:24

1 resposta

1

Note que estou usando bash, não csh, porque não me odeio. Mas você pode fazer tudo isso em csh, você só precisa traduzir. Se você quiser trabalhar no bash, simplesmente execute "bash --login" primeiro e então você está trabalhando no bash.

Para fazer o tipo de tarefa que você descreve em um script de shell, usamos pipes e não loops como você faria em uma linguagem de programação. Não me entenda mal, existem estruturas em loop em csh e bash, mas para o que você descreveu, fazemos diferente.

Se eu tivesse um comando que produzisse várias linhas de saída e eu quisesse que essas linhas fossem acionadas uma de cada vez por outro comando, eu conectaria os dois comandos com um pipe | , assim talvez:

cat file.txt | grep "algumas palavras"

O comando grep processa cada linha vinda de STDIN, que é ligada pelo pipe ao STDOUT do comando cat. Este é um exemplo trivial, mas serve.

outro:

echo 'um, dois, três' | tr ',' '\ n'

Isso substituirá todas as vírgulas por novas linhas, criando uma saída de três linhas a partir da entrada de uma linha.

Se eu quisesse adicionar uma extensão aos nomes de todos os arquivos em um diretório, poderia fazer algo assim:

cd directory
for filename in *
do
  mv ${filename} ${filename}.extension
done

O * é um padrão de globulação de arquivos. A globulação de arquivos ocorre quando um padrão na linha de comando é substituído por qualquer nome de arquivo no diretório atual que corresponda ao padrão de globbing. O * significa "qualquer coisa"

    
por 16.12.2016 / 16:05