Estou começando a experimentar o Crunchbang (que é baseado no Debian e usa o terminator ) como um ambiente de desenvolvimento web, e uma das coisas com as quais estou lutando é o comportamento xdg-open
. Eu venho de um background OSX, então me perdoe se essa pergunta parecer densa.
Eu gostaria de poder abrir um URL xdg-open http://www.google.com
e continuar usando a mesma janela do terminal para trabalhar (é assim que open
funciona no OSX). No momento, usar xdg-open
ocupa a guia / sessão atual até fechar a janela do navegador ou terminar manualmente as coisas ctrl + c
. Eu preferiria que iniciasse um novo processo, para abrir uma URL, consultar os dados na página e usá-la na mesma guia / janela sem precisar abrir outra.
command-line
file-opening
Nick Tomlin
fonte
fonte
Respostas:
Estranho, funciona assim imediatamente no meu Debian. Tente executá-lo em segundo plano:
Você pode transformar isso em uma função adicionando estas linhas ao seu
~/.bashrc
arquivo:Você pode simplesmente executar
open http://www.google.com
e ele será executado em segundo plano.fonte
open
, (ex: open = 'xdg-open') existe uma maneira de obter a funcionalidadexdg-open <url> &
sem usar uma função shell?Se você deseja desanexar o processo do shell atual em vez de iniciá-lo como um trabalho em segundo plano
xdg-open http://www.google.com &
, eu gosto dodetach
utilitário:Pode-se criar um alias para isso. Eu gosto
detach
mais denohup
como fecha stdin stdout e stderr por padrão, para que sua chamada seja mais limpa.fonte
detach
parece não existir na minha distro.nohup
inicia o processo, mas ainda ocupa a janela do terminal.detach
também não está na minha distro; mas python pode lidar com abertura URLs e destacando:python -m webbrowser -t "http://example.com"
. Isso deve funcionar imediatamente em quase todas as distribuições um pouco recentes do linux.detach
nem esteja no AUR, foi fácil instalar a partir do código-fonte e, além disso, foi o único programa que conseguiu o que eu queria. (as alternativas listadas aqui e nodetach
website não permitem fechar o shell enquantoxdg-open
estiver em execução, ou pelo menosdetach
não fazer o meu shell reclamar um pouco)xdg-open
aguarda a conclusão do programa. Isso é por design. Se o programa for um modo de texto, ele deverá permanecer em primeiro plano no terminal. Mesmo que o programa seja da interface gráfica do usuário, esse comportamento é útil casoxdg-open
seja usado em um script e o script queira executar alguma coisa após a edição do arquivo (por exemplo, envie a nova versão para algum lugar ou faça algo com a nova versão).Se você não quiser esperar, corra
xdg-open
em segundo plano. Você pode executar qualquer comando shell em segundo plano colocando um e comercial no final.Com alguns programas,
xdg-open
retorna imediatamente. O que acontece é que o programa quexdg-open
chama retorna imediatamente. Isso geralmente acontece com os programas da GUI que abrem todos os arquivos em uma única instância: quando você os inicia pela segunda vez, eles enviam uma mensagem para a instância em execução para dizer para abrir o arquivo e sair imediatamente.fonte
xdg-open
retorna imediatamente (posso confirmar isso no Ubuntu 16.04), mas o programa que ele chama pode se mover para o segundo plano. Por exemplo, no meu sistema,xdg-open
chama o Evince para arquivos PDF;evince foo.pdf
bloqueia até você fechar o arquivo PDF, a menos que o PDF já esteja aberto. Nesse caso, o segundoevince
processo iniciado porxdg-open
focaliza a instância existente e sai.xdg-open
não tem controle sobre isso, a menos que haja uma maneira de fazer o programa manter um processo em execução.Ao combinar a resposta de terdon e a discussão de Dan D.,
nohup
criei uma função que faz exatamente o que eu quero:Adicionei isso ao meu
.bashrc/.zshrc
arquivo:Para uma explicação de
/dev/null 2>&1
ver esta discussão sobre ocultarstdout
estderr
.fonte
Tente o seguinte:
Eu uso essa técnica para colocar na fila os URLs magnet: // no meu cliente Bit Torrent Vuze.
As aspas simples ajudam a proteger o conteúdo dos URLs para que o shell não tente interpretá-los.
fonte
xdg-open
? Parece que vários dos respondentes aqui indicaram que o comportamento normal é que o controle retorne ao terminal após algum período de tempo.Se você precisar abrir páginas da Web na 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 eles em novas guias.
fonte
Como hoje, nenhuma dessas opções funcionou para mim. Estou ciente de que o OP disse "use xdg-open", desculpe-me antecipadamente.
Acabei fazendo um simples simples
chrome https://google.es --new-window || chromium https://google.es --new-window || firefox https://google.es
.Se você não possui nenhum desses três navegadores, sinta-se à vontade para usar os corretos com sua preferência de pedido.
Nota: O Firefox abriu uma nova janela sem adicionar nada. Caso não funcione sem costura para você, use
firefox https://google.es -new-instance -new-window
. Observe que é apenas um-
para sinalizadores do Firefox.fonte
renegar é o comando certo para isso.
Eu uso 2 funções para isso, a fim de mantê-lo mais legível.
fonte
disown
não impede que erros sejam enviados para o terminal.