Escrevendo no bash enquanto está funcionando

3

Quando você está realizando operações demoradas no bash como instalar um novo software, é possível escrever um texto que aparecerá no prompt quando a operação terminar.

Por exemplo

Imagine correr:

apt-get install eclipse-platform

Em seguida, vai demorar um pouco para terminar enquanto você vê o log de instalação, enquanto isso eu quero criar novas pastas (espaços de trabalho) que o Eclipse usará posteriormente.

Isso é possível sem abrir um novo terminal (ou guia)?

    
por whirlwin 06.05.2011 / 12:22

5 respostas

4

Você pode executar a instalação em segundo plano. Isso deixa o primeiro plano livre para você digitar outros comandos. Você será notificado quando o trabalho em segundo plano terminar.

Verifique a página de manual do apt-get e procure opções que o façam funcionar silenciosamente sem escrever muita saída. Verifique as opções que fazem com que funcione sem exigir entrada do usuário (por exemplo, confirmações)

Use o redirecionamento para que o apt-get escreva mensagens e erros nos arquivos, use o sufixo e comercial para executar o comando em segundo plano

nohup apt-get --be-quiet --dont-ask \
    install eclipse-platform > agiep.out 2>agiep.err &

Você provavelmente não precisa de nohup (veja man page). Eu inventei --be-quiet e -dont-ask , então verifique man apt-get para equivalentes reais (se houver).

Veja também fg no manual do seu shell.

Nota: muitos dos recursos acima são dependentes do shell. Deve ser OK em bash, ksh e sua laia.

    
por 06.05.2011 / 12:43
4

Se o programa em questão não consome stdin, você pode digitar os comandos seguidos de Enter e executá-los depois que o programa terminar (e enquanto nenhum deles consumir stdin).

    
por 06.05.2011 / 12:34
4

Existem muitas maneiras de conseguir isso.

Você pode pausar uma tarefa a qualquer momento pressionando ctrl + z . Então, para retomar a tarefa em segundo plano, use o comando bg . Você pode trazer uma tarefa de volta ao primeiro plano com fg

Portanto, se o apt-get estiver em execução, faça ctrl + z e, em seguida, execute bg . isso fará com que seja executado em segundo plano.

Você também pode ler na tela ou byobu.

    
por 06.05.2011 / 22:41
3

Um alias útil que vem com o .bashrc do ubuntu (eu não sei se ele também vem em debian) é esse aqui:

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

Ele usa o comando notify-send (ambiente de área de trabalho): Com o comando notify-send, é possível enviar notificações da área de trabalho para o usuário por meio de um daemon de notificação a partir da linha de comando. Essas notificações podem ser usadas para informar o usuário sobre um evento ou exibir alguma forma de informação sem entrar no caminho do usuário.

Você pode emitir seu comando em um subshell em segundo plano para continuar fazendo as coisas nesse shell. Além disso, você pode adicionar verificações para obter mensagens diferentes, se o comando foi OK ou não:

( sleep 5 && alert "sleeped OK" || alert "something nasty happened with sleep") &
    
por 06.05.2011 / 14:13
3

Isso provavelmente é um pouco exagerado, especialmente se você estiver executando algo como o Gnome ou o KDE, onde você pode ter várias janelas do bash, mas você deve olhar para a tela.

A tela

permite executar várias sessões de terminal em uma única janela. Ele também permite que você saia da tela, mas deixe os processos em segundo plano em execução e, posteriormente, reconecte todos esses processos em segundo plano, para que você não possa nem mesmo dizer para sair.

Basicamente, para iniciar a tela, você iniciaria o terminal e digitaria screen . Ele vai te dar uma mensagem sobre si mesmo, basta pressionar enter para passar por ele. A tela é um programa completo, então eu quase não vou arranhar a superfície, mas aqui estão algumas tarefas básicas. Isto é tudo assumindo as configurações padrão (que desde que você não usou o programa deve ser o mesmo).

Existe um conjunto de meta-chaves que devem ser pressionadas antes de cada comando de tela, caso contrário, a entrada vai diretamente para a qual a sessão de terminal é mostrada. A meta-chave padrão é ctrl-a . Então, por exemplo, para criar uma nova janela, você primeiro atingirá ctrl-a e, em seguida, atingiria c

Comandos da tela úteis

Para criar uma nova janela: ctrl-a c

Para avançar para a próxima janela: ctrl-a n

Para voltar uma janela: ctrl-a p

Para ir para uma janela: ctrl-a # , em que # é o número da sessão que você deseja alternar para

Para ver todas as janelas abertas: ctrl-a "

Para fechar uma janela: digite exit como normal

Para desanexar uma sessão: ctrl-a d

Para reconectar uma sessão: Ao iniciar a tela, adicione a opção -r

Como fazer o que você pediu

Então, para fazer o que você pediu, siga estas etapas

  1. Abra o terminal

  2. escreva screen

  3. escreva apt-get install eclipse-platform

  4. escreva ctrl-a c

  5. Execute seus outros comandos

Quando você estiver no passo 5, seu comando a partir do passo 3 continuará em execução. Para verificar a qualquer momento, basta digitar ctrl-a p . Para voltar para onde você estava digitando seus outros comandos, digite ctrl-a n . Quando tudo estiver terminado, você pode fechar a tela e o terminal completamente digitando exit em todas as suas janelas. Mas se você estiver no meio de um conjunto de comandos e desejar voltar a ele mais tarde, simplesmente desconecte sua sessão usando ctrl-a d . Quando você quiser voltar e terminar, basta iniciar a tela com a opção -r, como assim screen -r

Mais uma vez, este é apenas um exemplo simples e não entra em tudo que você pode fazer com a tela. Mas se você está fazendo muito trabalho na tela do terminal pode ser uma ótima ferramenta.

    
por 06.07.2011 / 21:15

Tags