Criando um script Bash simples com vários comandos [duplicado]

0

Tentando criar um script bash que abre o gnome-terminal e, em seguida, executa ls para exibir o conteúdo de um diretório, mas ele simplesmente abre o gnome-terminal. Eu vou estar criando alguns outros scripts que também usam vários comandos.

Meu script:

#!/bin/bash
gnome-terminal
ls -a /examplefolder

EDITAR:

Para esclarecer o que estou tentando alcançar. Estou tentando criar um script que abra o gnome-terminal, liste o conteúdo do / examplefolder e, em seguida, esteja pronto para o uso regular do terminal. Isso é possível, ou estou latindo na árvore errada?

    
por please delete me 02.06.2014 / 00:29

4 respostas

6

(Para o Ubuntu 12.04) O problema aqui é que com o seu script o bash abrirá um terminal gnome e então executará o comando no seu terminal atual em vez do recém-aberto (se é que você está realmente tentando fazer).

Nota: também como sugerido por @unorthodox grammar & deve ser usado no final do comando que você não deseja esperar (permitindo que eles sejam executados em segundo plano). No entanto, curiosamente, esse não é o problema, pelo menos no Ubuntu 12.04. Mas talvez em outros sabores do Ubuntu isso possa ser um problema.

Você pode executar os comandos no recém-aberto gnome-terminal usando o seguinte comando:

gnome-terminal -e "ls -a /examplefolder"

ou

gnome-terminal --command "ls -a /examplefolder"

No entanto, isso fecha o terminal assim que os comandos são executados e se você quiser ver o resultado desses comandos, não será possível. Note que o gnome-terminal não foi projetado para este caso de uso (ver os resultados em um gnome-terminal recém-aberto a partir do script). Uma das soluções possíveis é a resposta é o seguinte:

Deixe o gnome-terminal executar o bash e dizer ao bash para executar seus comandos e depois executar o bash

gnome-terminal -e "bash -c \"echo foo; echo bar; exec bash\""

ou

gnome-terminal -x bash -c "echo foo; echo bar; bash"

O exec bash no final é necessário porque bash -c terminará assim que os comandos estiverem prontos. exec faz com que o processo em execução seja substituído pelo novo processo, caso contrário, você terá dois processos bash em execução.

Você pode consultar esta resposta para outras soluções alternativas.

    
por MB_CE 02.06.2014 / 00:52
3

Para que os comandos sejam executados 1 após o outro sem esperar que o anterior termine:

#!/bin/bash
ls -a /examplefolder &
leafpad &
ls -a /home &
exec bash

Para que os comandos sejam executados um após o outro, esperando que o anterior termine primeiro:

#!/bin/bash
ls -a /examplefolder
leafpad
ls -a /home
exec bash

Como sugerido pela resposta de MB_CE, o uso de "exec bash" como um comando final pode ser usado para manter o terminal aberto, porque tecnicamente o bash ainda está em execução.

    
por please delete me 02.06.2014 / 02:26
2

Em um script bash, os comandos são executados um após o outro. Seu script inicia o gnome-terminal , espera que ele termine e execute ls -a /examplefolder . Para executar um comando através do gnome-terminal, use o parâmetro -x :

gnome-terminal -x bash -c 'ls -a /examplefolder; read -p "Press [ENTER] to continue..."'

Isso iniciará bash no terminal recém-aberto e fará com que ele execute os comandos ls e read .

A propósito, você tem algum motivo específico para iniciar um para iniciar um terminal a partir de um script de shell? (Geralmente é o contrário.) Se você quer apenas iniciar um shell script a partir do seu desktop e ver seus resultados em um terminal, você pode simplesmente criar um launcher para o script e selecionar "run in terminal", pelo menos no Xubuntu , mas tenho certeza que outros sabores têm uma opção semelhante.

    
por kraxor 02.06.2014 / 00:44
1

Mostrar saída no terminal

gnome-terminal -x  bash -c "echo foo; echo  bar; read || sleep 9999"  

ou na viúva da GUI

 ( echo foo;  sleep 5; echo  bar ) | zenity --text-info
    
por totti 03.06.2014 / 10:20