Comandos de fila para durar o subshel mesmo que um deles lance novo shell

0

Eu quero automatizar algo escrevendo um script simples, iniciando consecutivamente alguns scripts, um após o outro. E, em seguida, definir alguns aliases no shell superior.
Problema: alguns desses comandos iniciam um novo shell. E todos os comandos depois disso são lançados no shell anterior. Existe alguma maneira de enfileirar esses comandos que vêm depois daquele no shell "superior"?
Exemplo simples:

#!/usr/bin/ksh
#normally this ksh is executed deep inside other script i cannot modify
ksh
echo test

Existe alguma maneira de imprimir "teste" no shell apenas iniciado pelo comando ksh? Normalmente o teste é impresso no shell anterior - fica disponível após o comando "exit" Obrigado por qualquer ajuda.

    
por Aleksander Fular 23.05.2013 / 14:27

1 resposta

0

Quatro alternativas, mas cada uma delas tem uma desvantagem:

  1. Certifique-se de que os comandos que você deseja executar no ksh sejam gravados no arquivo mycmds e inicie o ksh da seguinte forma:

    cat mycmds /dev/tty | ksh -i
    

    Drawback: Você perde os recursos de edição de linha de comando do ksh.

  2. Certifique-se de que os comandos que você deseja executar no ksh sejam gravados no arquivo /tmp/mycmds$$ ; defina a variável de ambiente MYCMDS para /tmp/mycmds$$ antes de iniciar ksh -l ; e adicione o seguinte ao seu $HOME/.profile :

    if [ -n "$MYCMDS" ] ; then
        . "$MYCMDS"
        MYCMDS=
        export MYCMDS
    fi
    

    Drawback: Todo mundo que usa este programa tem que modificar seu $HOME/.profile .

  3. Organize a coisa toda de tal maneira que os comandos que você quer executar sejam gravados em um arquivo mycmds , que é então originado via . mycmds no shell inicial . Coloque tudo isso em uma definição de função.

    Drawback : Em vez de iniciar um novo shell, você modifica o ambiente e / ou as definições de alias do inicial. Todo mundo que usa este programa tem que usar o ksh.

  4. Certifique-se de que os comandos que você deseja executar sejam gravados no arquivo mycmds e inicie um bash da seguinte forma:

    bash -i --init-file mycmds
    

    Drawback: Você recebe um bash em vez de um ksh.

por 23.05.2013 / 14:54