Tenho scripts que corro um arquivo de texto e, em seguida, abra-o em um editor. Se eu abrir uma janela do emulador de terminal na minha sessão da área de trabalho e executar o script, gostaria que o editor fosse gráfico como gedit
. Mas, se eu estiver conectado através do ConnectBot no meu telefone ou similar (sem sessão na área de trabalho), gostaria que o editor fosse nano
.
Atualmente, tenho que manter 2 scripts diferentes, idênticos, exceto a última etapa (ou deixar a gráfica executar, com erro desativado e, em seguida, abrir manualmente o arquivo nano
). Ter dois scripts quase idênticos é ineficiente do ponto de vista de manutenção.
Um script pode detectar em qual dessas situações estou e abrir o editor correto?
(Encontrei maneiras de um script detectar se está sendo executado em uma janela do emulador de terminal ou clicando duas vezes, mas ainda não encontrei uma maneira de detectar se a janela está sendo executada em uma área de trabalho ... Acho que não conhecer a terminologia correta para o google)
fonte
$EDITOR
por padrão em vez denano
, enano
ativar o recurso se não estiver definido.Respostas:
Você pode usar a variável de ambiente
$DISPLAY
como acionador dentro de umaif
condição. Normalmente, quando essa variável tem um valor, você é capaz de executar aplicativos gráficos.Aqui está um exemplo do bash :
O operador
-z
retornará true quando o envvar$DISPLAY
estiver vazio e seu script será executadonano
; em todos os outros casos, ele será executadogedit
.De acordo com o comentário deste @ vurp0 :
Eu sugeriria modificar a expressão de teste da seguinte maneira:
Assim, os valores das duas variáveis serão concatenados em uma sequência comum, que será processada pelo operador
-z
.Referências:
fonte
[[ -z ${DISPLAY} && -z ${WAYLAND_DISPLAY} ]]
Normalmente, os terminais virtuais usam
/dev/pts
pseudo-terminais . Portanto, com base na saída dotty
comando, podemos criar umacase
declaração simples para lidar com a abertura de um editor específico:Ou formatado mais bem:
Comparado ao uso de variáveis de ambiente, isso é um pouco mais confiável e, considerando que usa a
case
instrução comtty
comando um pouco mais portátil. O que provavelmente seria melhor é combinar os dois, com testes extras, como"/dev/tty"*) [ -n "$DISPLAY" ] && gedit ;;
fonte
tty
dá/dev/tty1
, enquantognome-terminal
(primeira guia) dá/dev/pts/0
.gedit
deve ser o/dev/pts*
caso. Eu os troquei durante o teste de erro em tty e acabei copiando-o aqui sem voltar. Obrigado, já editado.Isto é o que eu tenho usado:
O motivo desse código foi esta pergunta: O atalho da área de trabalho para o script Bash trava e queima
Você pode modificá-lo para ficar assim:
fonte