Por que as variáveis do bash desaparecem quando eu uso o xargs?

4

Eu tenho um script bash simples e quero contar com que frequência um comando é chamado. Aqui está um exemplo mínimo, o contador é chamado de c e deve ser 4 no final:

#!/bin/bash

c=0;
for a in X Y; do
  for b in 1 2; do
    c="$(( ${c} + 1 ))"
    echo "${a}${b}"
  done #| xargs -L 1 -P 20 echo
  echo "count $c"
done
echo "--"
echo "final $c"

Funciona muito bem sem xargs (final = 4), mas quando descomenteço o pipe para xargs ele não conta nada (final = 0). Por quê?

Expected output: |  This happens with xargs:
X1               |  X1
X2               |  X2
count 2          |  count 0
Y1               |  Y1
Y2               |  Y2
count 4          |  count 0
--               |  --
final 4          |  final 0
    
por Gilles 19.05.2014 / 14:45

1 resposta

4

O canal significa que o loop for está acontecendo em um subshell, que não repassa $ c para o resto do programa. Você precisará reescrever sem o tubo. Esta pergunta sobre o StackOverflow é bem parecida . A sintaxe <( ) pode ser sua amiga aqui.

    
por 19.05.2014 / 15:43