Use o xdg-open para abrir uma url com um novo processo

9

Estou começando a experimentar o Crunchbang (que é baseado no Debian e usa terminator ) como um ambiente de desenvolvimento web, e uma das coisas com as quais estou lutando é o comportamento de xdg-open . Eu venho de um fundo OSX, então me perdoe se essa pergunta for densa.

Gostaria de poder abrir uma URL com xdg-open http://www.google.com e continuar usando a mesma janela de terminal para trabalhar (é como open funciona no OSX). No momento, usar xdg-open ocupa a guia / sessão atual até eu fechar a janela do navegador ou terminar manualmente com ctrl + c . Eu prefiro que inicie um novo processo, assim posso abrir uma URL, fazer referência a dados na página e usá-la na mesma guia / janela sem precisar abrir outra.

    
por Nick Tomlin 03.05.2013 / 20:55

5 respostas

7

Estranho, funciona assim pronto no Debian. Tente executá-lo em segundo plano:

xdg-open http://www.google.com &

Você pode transformar isso em uma função adicionando essas linhas ao seu arquivo ~/.bashrc :

function open () {
    xdg-open "$*" &
}

Você pode simplesmente executar open http://www.google.com e ele será executado em segundo plano.

    
por 03.05.2013 / 21:28
8

Se você quiser desanexar o processo do shell atual em vez de iniciá-lo como um trabalho em segundo plano com xdg-open http://www.google.com & , eu gosto do % utilitáriodetach :

detach xdg-open http://www.google.com

Pode-se criar um alias para isso. Eu gosto de detach over nohup como fecha stdin stdout e stderr por padrão, então sua invocação é mais limpa.

    
por 04.05.2013 / 01:40
4

xdg-open aguarda o término do programa. Isso é por design. Se o programa é um programa em modo texto, ele deve permanecer em primeiro plano no terminal. Mesmo que o programa seja um GUI, esse comportamento é útil no caso de xdg-open ser usado em um script e o script desejar executar algo após o arquivo ter sido editado (por exemplo, enviar a nova versão para algum lugar ou fazer algo com o novo versão).

Se você não quiser esperar, execute xdg-open no plano de fundo. Você pode executar qualquer comando shell em segundo plano colocando um e comercial no final.

xdg-open http://www.google.com &

Com alguns programas, xdg-open retorna imediatamente. O que acontece é que o programa que xdg-open invoca retorna imediatamente. Isso normalmente acontece com programas GUI que abrem todos os arquivos em uma única instância: quando você os inicia pela segunda vez, eles enviam uma mensagem à instância em execução para avisar que ela abre o arquivo e sai imediatamente.

    
por 04.05.2013 / 02:41
0

Tente isto:

DISPLAY=:0.0; xdg-open '<url>'

Eu uso essa técnica para enfileirar URLs magnet: // no meu cliente Bit Torrent Vuze.

ssh someserver "DISPLAY=:0.0; xdg-open 'http://www.google.com/'"

As aspas simples ajudam a proteger o conteúdo das URLs para que o shell não tente interpretá-las.

    
por 03.05.2013 / 21:15
0

Se você precisar abrir páginas da web a partir da linha de comando (loop), basta abrir o navegador antes de iniciar o script.

Nesse caso, ele não espera que o navegador seja fechado após o primeiro link, mas abre todos em novas guias.

    
por 30.07.2014 / 19:50