Eu tenho essa linha na minha .bashrc
e gostaria de saber o que exatamente isso significa
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Eu tenho essa linha na minha .bashrc
e gostaria de saber o que exatamente isso significa
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Respostas:
$-
significa 'sinalizadores atuais'.echo $-
retorna "himBH". Todos esses são padrões.[[ $- != *i* ]] && return
realmente 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.
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
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.
$-
e*i*
e como ele descobrir se o seu modo interativo ou não