o arquivo shell abre o terminal e executa uma sequência de comandos em uma ordem específica

1

O que eu costumava fazer é:

  1. Abra manualmente uma instância de terminal para executar os seguintes comandos e arquivos de shell

  2. Executar

    PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PAT‌​H
    
  3. executar:

    cd /home/userA/scripts
    
  4. executar:

    varset.sh
    

    que exporta e define algumas variáveis.

  5. executar:

    source ff.sh $input $output
    
  6. executar:

    bb.sh
    

    que me pede para inserir um número durante sua execução.

  7. executar

    bc.sh 8
    

Então eu tive que copiar manualmente e colá-los no terminal antes de cada execução.

O que eu quero fazer agora é colocar tudo isso no arquivo de script que irá abrir automaticamente o terminal e executá-los em sequência para que o próximo comando só seja executado quando o primeiro estiver pronto, para que eu não precise faça isso manualmente mais.

Depois de aplicar a sugestão de muru, encontrou aqui Eu usei o script abaixo apenas para as etapas 1 a 4, mas não está funcionando corretamente:

gnome-terminal -x sudo -u userA bash -c 'PPACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH; cd /home/userA/scripts; source varset.sh; bash'' 

Não é executado na mesma sequência que eu coloquei.

Isto abre o terminal com sucesso, mas a primeira linha aparece no terminal é uma mensagem que é encontrada em varset.sh (embora este seja o terceiro comando a ser executado) e a outra coisa é que nenhuma das variáveis que deveriam ser set usando este varset.sh está setado, por exemplo quando eu uso echo $ var1 (que é encontrado em variables.sh) é nada mostrar o que significa que as variáveis não estão definidas a única coisa que funciona em variables.sh é a mensagem de eco exibida .

A segunda linha que aparece no diretório é o diretório de trabalho do terminal que está definido como /home/userA/scripts .

A terceira coisa é que esse comando PACKAGE_PATH=PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH , que define a variável $ PACKAGE_PATH, não está funcionando.

Então, se alguém puder, por favor, informe como executar esses comandos e arquivos shell na sequência solicitada.

    
por Tak 23.09.2014 / 14:43

1 resposta

1

Basta escrever um script:

#!/usr/bin/env bash

PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PAT‌​H

cd /home/userA/scripts
## You need to source this script if it defines variables. Otherwise
## the variables won't be available to your main script. '.' is the same
## as 'source' but more portable to different shells.
. varset.sh &&


. ff.sh $input $output &&
bb.sh && 
bc.sh 8 &&

O && depois de cada comando garante que o próximo só será executado se o primeiro sair com êxito.

Agora você pode salvar o script como ~/scripts/foo.sh , torná-lo executável ( chmod 744 ~/scripts/foo.sh ) e executá-lo a partir de um terminal:

~/scripts/foo.sh

Como alternativa, você pode criar um arquivo .desktop para ele e executá-lo clicando duas vezes conforme explicado aqui . Basta alterar a linha Terminal=false para Terminal=true .

    
por terdon 23.09.2014 / 14:53