Batch executa vários comandos em um novo shell

2

Estou tentando abrir um novo Konsole e executar vários comandos nele basicamente do meu shell de terminal aberto eu preciso:

  1. Abra um novo shell de terminal
  2. Definir ambiente localizado em uma pasta específica
  3. Executar gedit , por exemplo
  4. Executar outro aplicativo (pode ser um alias)

Agora eu tentei a opção:

konsole --noclose -e 'source /$MYTOOLS/env.csh | gedit | aliasApp'

mas isso me dá o seguinte erro:

Warning: could not find 'source /$MYTOOLS/env.csh | gedit | aliasApp' , starting '/bin/tcsh' instead. Please check your profile settings

    
por alex-s 10.11.2015 / 13:27

1 resposta

3

A opção de linha de comando -e konsole especifica um programa para ser executado na emulação de terminal recém-criada; normalmente, seria um shell (como /bin/bash ou /bin/tcsh ), mas poderia ser qualquer programa de console. Pode ser qualquer executável; ele será executado com seu stdin, stdout e stderr redirecionados para o terminal emulado criado pelo konsole.

O que não pode ser uma linha que precisa ser interpretada pelo shell, já que esse não é o caminho para um executável.

No entanto, você pode passar argumentos para o executável. Você acabou de adicioná-los ao final da chamada do konsole. E shells - incluindo tcsh, que você parece estar usando, e bash - permitem que você especifique um único comando para executar usando a opção de linha de comando -c . Então você poderia fazer isso:

konsole -e /bin/tcsh -c 'source /$MYTOOLS/env.csh && gedit && aliasApp'

(Não está claro para mim por que você deseja iniciar um emulador de terminal para executar gedit , que é baseado em GUI. Mas talvez tenha sido apenas um exemplo.)

Esteja ciente de que o shell será finalizado assim que a sequência de caracteres da linha de comando fornecida for concluída e o konsole será encerrado quando o executável especificado for finalizado. Então, isso não terminará fornecendo um shell após a execução desses comandos.

Se você deseja criar um shell com um conjunto específico de procedimentos de inicialização, é necessário usar um mecanismo específico do shell para executar o script de inicialização. Para bash, por exemplo, você pode usar a opção de linha de comando --rcfile para especificar um script de inicialização customizado; infelizmente, essa opção não é entendida pelo tcsh, então você precisaria fazer outra coisa (como passar o nome do arquivo em uma variável de ambiente e ter seu script de inicialização normal como fonte do arquivo se a variável de ambiente estiver configurada).

    
por 10.11.2015 / 17:03