Inicie o terminal a partir do atalho do teclado, execute o comando interativo e saia no Ubuntu 17.10

Inicie o terminal a partir do atalho do teclado, execute o comando interativo e saia no Ubuntu 17.10

Estou tentando realizar o seguinte:

  1. abra um terminal gnome a partir do atalho do teclado, diga Ctrl+Shift+E.
  2. Execute um comando no terminal. Para concreto, o comando é gio open $(fzf). O comando é interativo e inicia programas externos (como evince).
  3. Assim que o programa externo for iniciado, feche o terminal sem fechar o programa externo.

O comando que me interessa para a etapa 2 acima é gio open $(fzf): eu seleciono um arquivo usando o fuzzy finder fzfe, em seguida, o comando gio openabre esse arquivo com o programa padrão do gnome.

Posso executar as três etapas acima, uma por uma:

  1. Posso vincular um atalho de teclado nas configurações a gnome-terminal: Ele abre um terminal conforme o esperado.
  2. Então eu digito no terminal recém-aberto meu comando gio open $(fzf): Se eu selecionar um arquivo pdf de fzf, ele abre o evince com o arquivo selecionado.
  3. Posso digitar Ctrl+D para fechar o terminal. Fazer isso faznãoevidência próxima. Este é o comportamento pretendido.

e executar essas três etapas manualmente funciona.

Meu objetivo é automatizar o acima.Deve funcionar da seguinte maneira. Conforme digito o atalho de teclado Ctrl+Shit+E (ou qualquer outro), um terminal gnome deve abrir e o comando gio open $(fzf)deve ser executado. Assim que o comando interativo for executado (que abre um programa externo como o evince), o terminal deverá fechar automaticamente sem fechar o evince.

O que eu tentei.

  • Adicionar um atalho de teclado com o comando gnome-terminal -- bash -c "gio open $(fzf)"não funciona. Pressionar a combinação de teclas não faz nada.
  • Se eu adicionar o comando gio open $(fzf)$no final do meu .bashrc, um atalho de teclado com o comando gnome-terminalabre o terminal e o comando é executado. Assim que eu seleciono um arquivo pdf, o evince é aberto com o arquivo selecionado (sim!!!). Mas então, se eu pressionar Ctrl+D, o terminal fecha e o evince também (talvez porque o evince seja um subprocesso?).
  • Se eu adicionar o comando gio open $(fzf)$ && exitno final do meu .bashrc, um atalho de teclado com o comando gnome-terminalabre o terminal e o comando é executado, mas assim que eu seleciono um arquivo, o terminal fecha sem abrir o evince (o evince pode ter iniciado e obtido fechado imediatamente, não sei dizer).

Observe que brincar com .bashrc foi principalmente para fins de teste. Gostaria de evitar poluir meu .bashrc.

Responder1

Mas então, se eu pressionar Ctrl+D, o terminal fecha e o evince também (talvez porque o evince seja um subprocesso?)

Sim, claro, é um subprocesso e você deve executar esse processo como "desanexado". Depois disso você pode finalizar o processo principal (no seu caso - terminal).

Aqui está uma resposta detalhada sobre como executar processos desanexados.

https://superuser.com/questions/178587/how-do-i-detach-a-process-from-terminal-entirely

Outra forma de usar o próximo atalho:

bash -c "some_command" > /dev/null &2>&1

Neste caso, a janela do terminal não será levantada e você não precisa adicionar nada ao seu arquivo .bashrc.

Responder2

A mesma coisa estava me incomodando, então responderei a essa velha pergunta. Eu descobri isso xdg-opene gio opentenho problemas com esse tipo de script, e também notei que o gnome-terminal tem problemas com ele. Por exemplo, o xdg-open pode abrir o gedit para editar arquivos de texto, mas não o evince para visualizar PDFs. Então eu uso o seguinte script com xterm -e. Observe que isso deixará os arquivos nohup.out em seu diretório inicial. Você pode redirecionar o stdout se isso o incomodar.

#!/bin/bash

file="$(fzf)"

[ - n "$file" ] || exit 1

end="${file##*.}"

case $end in
  pdf | djvu | ps )
    exec nohup evince "$file"
    ;;
  * )
    exec nohup xdg-open "$file"
    ;;
esac

informação relacionada