zsh capture e canalize a saída para outro comando

1

Eu tinha o script zsh

printf '%s
paths=$(printf '%s
printf '%s
paths=$(printf '%s%pre%' www/scripts6/lib/* | sed -e 's@www/scripts6/@@g')
paths=$paths'main.js'$'%pre%'
echo -n $paths | xargs -0 -I {} -P 50 babel www/scripts6/{} > www/scripts/{}
' www/scripts6/lib/* | xargs -0 -I{} -P 50 babel {} > {}
' www/scripts6/lib/* | sed -e 's@www/scripts6/@@g') paths=$paths'main.js'$'%pre%' echo -n $paths | xargs -0 -I {} -P 50 babel www/scripts6/{} > www/scripts/{}
' www/scripts6/lib/* | xargs -0 -I{} -P 50 babel {} > {}

e funcionou (eu acho). Mas eu precisava copiar os arquivos para o diretório scripts em vez de scripts6 . Além disso, eu precisava adicionar um caminho extra à lista de caminhos manualmente, então tentei fazer isso:

%pre%

Esse foi um GRANDE REALIZAÇÃO para mim. De qualquer forma, o script cria o arquivo chamado {} no diretório scripts (e nada no diretório scripts/lib ). Isso me leva a acreditar que apenas o primeiro {} no código é substituído pelo argumento, e não pelo segundo (e não tenho explicação para a ausência de arquivos no diretório scripts/lib ).

Como posso fazer o script funcionar como esperado?

    
por mareoraft 04.09.2015 / 03:43

1 resposta

2

O redirecionamento acontece antes que xargs seja executado. Portanto, seu primeiro exemplo também cria um arquivo chamado {} , porque xargs nunca teve a chance de substituir o último {} .

Além disso, enquanto você tenta separar os nomes dos arquivos por nulos para tratar os nomes dos arquivos "corretamente", o esforço é em vão quando você usa echo . echo in zsh interpreta os escapes no estilo C (\ t, \ n, etc) por padrão. Você precisaria da opção -E para desabilitar isso.

Tente isso e veja se ele faz o que você quer

setopt monitor
for f in www/scripts6/lib/*(e*'REPLY=${REPLY#www/scripts6/}'*) main.js; do;
  while (( $#jobstates >= 51 )); do 
    sleep 1
  done
  echo -E babel $f \> www/scripts/$f &
done

Se a saída parece ok, remova o eco -E e substitua \ > com >

    
por 04.09.2015 / 08:01

Tags