Eu tenho um script Bash que estava tentando fazer para me ajudar a executar um comando bastante complexo com pequenas alterações que ele me perguntaria através do eco e da leitura.
Encontrei soluções para forçá-lo a executar um terminal para executar o comando, mas não estou interessado nisso. O que eu gostaria de fazer é que, se eu espaçar e apenas pressionar Enter nele no Nautilus (executando-o com o Run Software), uma gentilmente abrirá uma notificação dizendo "Por favor, execute isso a partir de um terminal".
Posso fazer com que o pop-up aconteça - como eu conheço o comando - mas não consigo que o script Bash diga se está sendo executado dentro de um terminal ou não, parece que sempre penso assim. Isso é possível?
||
interior[ … ]
assim? Se você usar[[ … ]]
, tudo ficará bem, mas normalmente o||
é usado para separar comandos e[ -t 0
é uma invocação incorreta[
porque]
está faltando o último . Normalmente, também não há um comando-p
. Eu concordo com o teste para um terminal; essa é provavelmente a maneira de fazer isso. É apenas a sintaxe que me preocupa.||
é visto antes do]
argumento final necessário para[
.PS1
Não é um teste confiável para saber se o shell é interativo. “Se um script precisa testar se está sendo executado em um shell interativo” também é confuso: deve ser se algum código precisar ser testado - um script geralmente não está sendo executado em um shell interativo (mas pode ser, se for de origem) . Testar parai
in$-
é a maneira correta de testar se o shell é interativo. Testar-t 0
ou-t 2
é a maneira correta de saber se o script está sendo executado em um terminal, diferente de ser interativo.Use a variável bash $ SHLVL para detectar o nível de aninhamento de shell. Em um script, execute 'raw' clicando duas vezes em 1; em um script em execução em um terminal, será 2.
fonte
Embora a resposta dos goldilocks esteja provavelmente correta no caso típico, parece que existem casos extremos. No meu próprio caso, meu xserver está configurado para iniciar
tty1
e nunca sai desse tty. Se o Xorgstdout
é um TTY, parece que os clientes terão esse TTY vinculado ao seu descritor de arquivo por padrão.Veja como eu resolvi meu problema:
Não testei isso para ver se funciona em uma configuração X mais padrão, e também duvido muito que esse seja o único caso extremo. Se alguém encontrar uma solução mais aplicável, volte e informe-nos.
fonte
Outro, usando as opções do bash, define a variável interna
$-
,.De
.bashrc
,fonte
cmd | sh -i | cmd
.