O que significa "[[$ -! = * I *]] && return" significa?

22

Eu tenho essa linha na minha .bashrce gostaria de saber o que exatamente isso significa

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Severus Tux
fonte

Respostas:

33
  • $- significa 'sinalizadores atuais'.
  • echo $-retorna "himBH". Todos esses são padrões.
  • então ... [[ $- != *i* ]] && returnrealmente faz o que diz acima em um comentário: verifica se o sinalizador interativo está definido. Os [[e]] o tornam um booleano para que ele acabe em "verdadeiro" ou "falso". "false && return" faz com que continue "true && return" faz com que execute o retorno.

Os sinalizadores padrão explicados em mais detalhes:

h é para "hash all": isso informa ao bash para lembrar os locais dos comandos encontrados ao consultar seu PATH.

i é para "interativo": inserindo entrada e voltando à saída.

m é para "monitor": permite o controle do trabalho

B é para "chave de expansão". Isso permite que você use expansão de chaves

H é para "expandir a história". É isso que permite executar novamente um comando do seu histórico, precedendo seu número com um ponto de exclamação


A propósito. Eu tenho ...

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Basicamente, faz o mesmo, mas mais fácil de ler, eu assumo.

Rinzwind
fonte
6

Basicamente, significa "Se os sinalizadores do shell não contiverem um i minúsculo, pare a função / script aqui".

[[ ]]

denota uma expressão condicional no bash

$-

significa as bandeiras do shell. Ele conterá "i" se o shell for interativo (ou seja, você pode digitar comandos, ao contrário de executar um script)

!=

simplesmente significa "diferente de".

*i*

é um padrão curinga que corresponde a qualquer coisa que contenha "i"

return

sem argumentos significa apenas interromper a execução da função ou script atual.

&&

é o operador AND lógico . A expressão à direita, neste caso return, só será avaliada (executada) se a expressão à esquerda for verdadeira . Portanto, em muitas linguagens de programação, a && bé uma abreviação de if a then b- isso é chamado de "avaliação de curto-circuito" e deixa os professores de programação loucos quando você a usa: D

delt
fonte
2

Eu diria que é como se diz: se o bash não estiver aberto em um shell interativo, não faça nada.

Eu não conheço toda a função, mas provavelmente existem comandos e sinalizadores definidos abaixo dessa linha, caso você tenha o bash aberto em um TTY.

O andarilho
fonte
obrigado :) mas eu estou ansioso para saber o que é exatamente $-e *i*e como ele descobrir se o seu modo interativo ou não
Severo Tux