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 >