bash -c resolução de variável em subshell

2

Como resolvo uma variável em um subshell dentro de "bash -c"?

A seguir, a segunda subshell - aquela com um "eco" dentro - é resolvida corretamente. A primeira subshell - com "touch" - não.

/bin/bash -c "\
A=/tmp/foo; \
echo $( touch \$A;  ); \
echo $( echo in subshell, \$A; ); \
"
    
por Eric Larson 06.04.2016 / 22:56

2 respostas

2

É simples, porque o subshell é avaliado a partir do seu shell atual e não do seu subshell. Escapar do $() fará com que funcione como esperado:

/bin/bash -c "\
A=/tmp/foo; \
echo \$( touch \$A;  ); \
echo \$( echo in subshell, \$A; ); \
"
    
por 06.04.2016 / 23:04
0

Como você está usando aspas duplas, o Bash está avaliando a string inteira primeiro, depois a executa.

Substitua sua primeira linha por /bin/bash -c echo “\ e você verá o seguinte: o código bash -c está tentando executar.

/bin/bash -c  echo "\
…


touch \$A;  ); echo $( echo in subshell, \$A; ); "
echo in subshell, \$A; ); "
touch \$A;  ); echo $( echo in subshell, \$A; ); 
touch \$A;  
echo in subshell, \$A; ); 
echo in subshell, \$A; 

Use aspas simples em vez disso.

    
por 06.04.2016 / 23:15

Tags