Eu tenho três scripts que preciso executar quando inicio minha máquina Ubuntu, eles iniciam os serviços que eu uso no meu ambiente de desenvolvimento.
Para fazer isso, abro manualmente três terminais e digito os comandos.
Existe alguma maneira de criar um script que abra três terminais e execute um comando em cada um deles? (Cada comando deve estar em uma janela de terminal separada para que eu possa ver a saída deles).
command-line
scripts
services
JSBach
fonte
fonte
gnome-terminal -e command
só funciona secommand
for citado. Então, isso não funciona:gnome-terminal -e "echo hello world; sleep 3"
mas isso faz:gnome-terminal -e "bash -c 'echo hello world; sleep 3'"
. Suspiro.; $SHELL
ao final do comando. Ex:gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"
Em vez de codificar
gnome-terminal
,konsole
etc., use o sistema Alternatives. O programa que executa o emulador de terminal padrão é:No meu sistema, ele abre uma nova instância do Konsole toda vez que eu executo esse comando.
Felizmente, os terminais parecem suportar a
-e
opção de executar um comando (eu verifiquei parakonsole
egnome-terminal
). Os argumentos após o comando são passados para o comando invocado. O Bash se recusa a permanecer aberto no meu terminal, é necessário um script adicional para obter um terminal:Se você salvou o script anterior
/home/user/hacky
e o tornou executável, execute seus scripts com:O caminho completo é necessário e
/home/user/hacky
deve ser executável.Minha tentativa anterior de executar um script em uma nova janela de terminal pode ser encontrada na revisão 2 , foi antes de eu perceber que os argumentos podem ser passados para
x-terminal-emulator
.fonte
bash
) ou ter uma linha comoread -p "Press Return to continue"
.cd xxx && start.sh
. O intérprete vê o && como a segunda parte do comando (o que é lógico), mas, se eu citar, ele tenta executar a coisa toda como um grande argumento.Muito simples-
Isso é suficiente para outros comandos que não precisam exibir nada no terminal. Mas aqui é preciso ver o status exibido.
Então, ele precisa rodar em uma janela de terminal
A outra postagem pretendia
[]
ser um espaço reservadoAqui "NAMEOFTHEPROFILE" deve ser substituído pelo nome do perfil que "Mantém o terminal quando o comando sai".
fonte
[]
era apenas espaço reservado--window-with-profile=NAMEOFTHEPROFILE
ao que eu deiAjudado pela resposta de @ nickguletskii , e meu próprio comentário sob a resposta dele, e inspirado no voto positivo de @ grabantot do meu comentário, aqui está minha maneira preferida de fazê-lo, especialmente quando eu quero que o terminal fique aberto para que eu possa usá-lo manualmente.
Ex. uso: isso é realmente útil para adicionar aos seus programas de inicialização, para que este script seja executado, abra um terminal, crie e nomeie uma guia no terminal e execute um comando para você. Ou você pode simplesmente adicionar um link simbólico para esse script na área de trabalho. Uso esse tipo de abordagem para clicar duas vezes em um único ícone na área de trabalho e abrir vários terminais (com várias guias nomeadas de acordo com o trabalho que vou fazer neles) e programas para configurar meu ambiente de programação, por exemplo, para o trabalho diário.
Aqui está um exemplo artificial, que abre uma única guia, intitula-a "test" e executa o comando simples
cd /etc; ls
dentro dela. A$SHELL
parte no final força o shell a permanecer aberto para que você possa ver sua saída e continuar usando (eu aprendi isso em outro lugar no Stack Overflow):Aqui está um exemplo mais complicado que abre três abas separadas no mesmo terminal gnome. Este é exatamente o tipo de coisa que meu atalho na área de trabalho faz para que eu possa abrir várias janelas de programação de uma só vez:
Aqui está um detalhamento desse comando acima:
gnome-terminal
= abrir um terminal gnomo--tab
= abra uma guia exclusiva para o que vem a seguir--title="tab 1"
= intitule esta guia "guia 1"--command="bash -c 'cd /etc; ls; $SHELL'"
= executa obash -c 'cd /etc; ls; $SHELL'
comando, que é um comando que acabei de criar como exemplo; aqui está o que ele faz:bash -c
diz que é um comando bash 'cd /etc
= 'alterar' o diretório no caminho "/ etc"ls
= 'l'i''t conteúdo deste diretório$SHELL
= esse boato enigmático é necessário para manter o shell aberto para que você possa trabalhar com ele. Se você deseja que o shell seja aberto, execute seu comando e feche, basta remover esta parte. No entanto, quero que a guia fique aberta para que eu possa tornar a programação mágica. :)--tab
peça para produzir a guia 2 e, novamente, a guia 3. Personalize com o conteúdo do seu coração.Captura de tela:
fonte
comentando a resposta de Lekensteyn. Eu sei que este é um post antigo, mas para quem acha isso útil (como eu acabei de fazer) Em vez de criar outro "script hacky", basta colocar uma função dentro do script que você está chamando
Chame seu script com "argumentos opcionais x-terminal-emulator -e / path / to / script hacky_function aqui"
Não se esqueça de colocar "$ @" no final do script
fonte
Use o comando screen e -d desanexe de uma sessão de tela existente e reconecte aqui -m force uma nova sessão de tela -S crie uma sessão nomeada em vez de usar o nome padrão
fonte