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.
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
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.