script para criar um novo shell e extender novos comandos em um novo shell, não no shell antigo

0

Eu tenho um script de comando shell csh regular que possui a seguinte estrutura. Eu quero gerar novos terminais e executar alguns comandos subseqüentes IN os novos shells criados.

xterm & ;
fonte myscript.scr; cd fred; run_tool &

xterm & ; fonte myscript.scr; conta de cd; run_tool &

Estou executando meu script em um termo csh chamado say term1. Então, a primeira parte é que eu quero abrir um novo termo de terminal2, e então, neste terminal recém-aberto, termine os próximos comandos. Então eu também quero um terminal adicional do terminal term1 original e execute alguns outros comandos neste novo terminal, diga term3

Estou descobrindo que o novo terminal2 é criado, mas os comandos a seguir são excedidos no terminal1 original, NÃO no novo terminal2.

Por favor, você pode aconselhar sobre como garantir que meus comandos subseqüentes sejam "transportados" para a nova execução do shell fof lá, observando também que eu preciso voltar e emitir um novo terminal

    
por mohd 12.01.2017 / 18:24

2 respostas

1

Uso:

xterm -e "myscript.scr; cd fred; run _tool" &
xterm -e "source myscript.scr; cd bull; run_tool" &

A opção -e executará o comando especificado dentro da sessão xterm , em vez de após , o que seu exemplo faz.

Na página de manual:

-e program [ arguments ... ]

This option specifies the program (and its command line arguments) to be run in the xterm window. It also sets the window title and icon name to be the basename of the program being executed if neither -T nor -n are given on the command line. This must be the last option on the command line.

    
por 12.01.2017 / 18:28
0

Acho que o que você quer é algo assim

xterm &
(source myscript.scr; cd fred; run_tool ) & 

Nesse caso, o primeiro comando será executado na sessão atual do shell e será enviado para o segundo plano. O segundo comando será executado em uma nova sessão gerada a partir da sessão atual e também será executado em segundo plano.

No entanto, estou um pouco confuso com o uso de 'terminal' vs. 'shell' na pergunta. Você está tentando carregar uma nova janela do terminal interativo? Ou simplesmente executar comandos sem afetar sua sessão atual do shell?

Algo que costumo fazer para evitar que minhas ações afetem minha sessão atual é o seguinte:

for my_dir in $some_list_of_dirs; do
    (
    cd "$my_dir"
    do stuff
    )
done

Dessa forma, seu diretório de trabalho não será alterado na sessão principal, apenas na subseção, e as alterações feitas no seu ambiente na sub-sessão não serão propagadas para a sessão principal.

    
por 12.01.2017 / 18:31