Por que meu bash não inclui o sinalizador interativo para esse script?

0

Trabalhando com esta resposta Eu tentei esse script para determinar se um script está sendo executado em cron ou interativamente:

#!/bin/bash

# "reliable" interactive check
case "$-" in
        *i*)
                interactive=1
                ;;
        *)
                interactive=0
                ;;
esac

echo \$-=$- interactive=$interactive 

# "maybe" interactive check
if [[ -t 0 ]]; then
        interactive=1
else
        interactive=0
fi

echo interactive=$interactive 

Chocantemente recebo respostas conflitantes para saber se é interativo ou não. Aqui está a saída quando eu corro do prompt do bash:

$-=hB interactive=0
interactive=1

E FYI estou no dia 18 com:

$ bash --version
GNU bash, version 4.3.42(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redist

Então, minha questão principal é por que o método "confiável" produz a resposta errada? Por que o bash não incluiu o sinalizador esperado nas opções? Os documentos parecem indicar que deveria. A versão "talvez" funciona realmente mais confiável?

    
por chicks 21.07.2017 / 18:22

2 respostas

3

O método "confiável" falha porque "este shell" é o shell que está executando o script, que não é interativo, não o shell do qual você iniciou o script.

Verificar se a entrada padrão é um terminal ( [[ -t 0 ]] ) é um pouco mais confiável, mas ainda não está determinando se o script está sendo executado a partir de cron : existem maneiras de executar um script de tal forma que [[ -t 0 ]] é bem-sucedido, mesmo quando não está sendo executado em um terminal.

A resposta aceita para Verificar se o script é iniciado pelo cron, em vez de ser chamado manualmente parece mais confiável para mim .

    
por 21.07.2017 / 18:28
0

[[ -t 0 ]] apenas determina se fd0 está aberto em um (pseudo) terminal. Como fd0 é a entrada padrão, normalmente é.

    
por 21.07.2017 / 18:27