Posso usar a fonte test1.sh com gnome-terminal -x?

0

Estou executando dois scripts de shell da fonte principal de uso.

main.sh:

#/bin/sh

a=1
b=2
c=3

gnome-terminal -x sh -c ". ./test1.sh|less" (note the source ".")

gnome-terminal -x sh -c ". ./test2.sh|less"
...
...

test1.sh:

#!/bin/sh

echo "a="$a #doesn't print anything

Eu consegui fazer o 2 seguinte separadamente, mas quando eu combino, não consigo acessar variáveis do main em outros arquivos

  1. gnome-terminal -x sh -c "test1.sh|less" #able para executar em terminal separado

  2. . ./test1.sh #able para acessar variáveis de main.sh em test1.sh

por Sam 02.10.2013 / 05:36

2 respostas

0

Você deve export de quaisquer variáveis que precisem ser referenciadas em um subshell.

No seu exemplo, coloque a afirmação:

export a b c

em algum lugar antes de chamar gnome-terminal . Como alternativa, defina as variáveis com a instrução de exportação:

export a=1 b=2 c=3

Suponho que você opte por test1.sh em uma tentativa de contornar o requisito export (já que um arquivo originado é interpretado pelo shell de origem, não executado em um subshell). O que você está negligenciando é que abrir um gnome-terminal iniciará um shell novo .

    
por zwets 02.10.2013 / 07:35
0

As variáveis não são compartilhadas entre instâncias de shell separadas. A única maneira que conheço para acessar uma variável de um script iniciado em um shell diferente é fazer com que o script grave a variável em um arquivo e depois acessar esse arquivo.

Agora, no seu caso especial, você pode enviar o valor da variável $a do script principal para o script de teste da seguinte forma:

main.sh:

#/bin/sh

a=1
b=2
c=3

gnome-terminal -x sh -c "test1.sh '$a' | less" # without source "."

# ... some other code

test1.sh:

#!/bin/sh

a=$1

echo "a=$a"

ou, use export como awets disse em sua resposta .

    
por Radu Rădeanu 02.10.2013 / 08:19