Quando você executa o script com:
bash /tmp/test0&
você está iniciando um processo bash totalmente separado e colocando-o em segundo plano. Você não pode ver as variáveis definidas nesse script; eles pertencem ao outro processo. Se você deseja obter acesso a variáveis definidas em outro arquivo, carregue esse arquivo em seu processo bash atual usando o . ou source :
. /tmp/test0
Depois disso, você poderá dizer $pid em seu script principal e obter o valor que foi definido no outro arquivo.
Tudo isso dito - a maneira como você está estruturando as coisas é muito intrigante. O script que você postou tem muitos outros erros que eu suponho serem de editar o verdadeiro para baixo para a pergunta (você usa $! como se fosse uma variável awk , mas então espera que a variável que você copiou para ser definido no script Bash, por exemplo, e test0 teria muitos erros de sintaxe). $! é definido apenas no Bash depois que um processo em segundo plano é executado com & : mesmo que o comando awk funcionasse, $pid estaria vazio. Se você deseja obter o PID do processo xterm dessa maneira, é necessário executá-lo como xterm ... & . bash /tmp/test0 & coloca o script test0 em segundo plano, em vez do comando xterm .
Parece que seria melhor livrar-se de test0 e apenas lançar xterm do script principal. Provavelmente vale a pena repensar sobre como você está lidando com as coisas em um nível mais alto . No mínimo, veja o que está no seu arquivo test0 real e veja se é o que você realmente quer.