O que [“$ {- # * i}”! = “$ -”] faz em sh? [duplicado]

1

Eu encontrei este lindo trecho de código em /etc/profile em uma caixa do CentOS:

for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

Eu sei que ele é carregado nos arquivos .sh de /etc/profile.d , mas estou confuso com a última instrução if, if [ "${-#*i}" != "$-" ] . O que esta sintaxe está fazendo? Eu nem tenho certeza de onde procurar.

    
por Xiong Chiamiov 02.08.2017 / 00:59

1 resposta

5

Basicamente, [ "${-#*i}" != "$-" ] verifica se o seu shell é interativo.

$- contém os sinalizadores usados para sua execução do shell (por exemplo: himBH , o i que significa que o shell é interativo). ${-#*i} produz a parte de $- que segue o primeiro i ( mBH com nosso exemplo). Se não houver i em $- , então ${-#*i} rende $- .

É exatamente isso que o teste se refere: se as duas sequências forem diferentes, isso significa que existe um i em $- , em outras palavras, que o shell é interativo.

    
por 02.08.2017 / 01:15