O que significa “[[$ -! = * i *]] && return” significa?

20

Eu tenho essa linha no meu .bashrc e gostaria de saber exatamente o que isso significa

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
    
por Severus Tux 24.09.2016 / 15:18

3 respostas

32
  • $- significa 'flags atuais'.
  • echo $- retorna "himBH". Esses são todos os padrões.
  • então ... [[ $- != *i* ]] && return realmente faz o que diz acima em um comentário: ele verifica se o sinalizador interativo está definido. O [[e]] faz dele um booleano, então acaba em um "verdadeiro" ou "falso". "false & amp; & amp; return" faz com que ele continue "true & amp; &; return" faz com que ele execute o retorno.

Os sinalizadores padrão são explicados em mais detalhes:

h é para "hash all": isso diz ao bash para lembrar os locais dos comandos encontrados através da consulta do seu PATH.

i é para "interativo": inserindo entrada & amp; voltando a saída.

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

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

H é para "histórico expandido". Isso é o que permite que você reexecute 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 suponho.

    
por Rinzwind 24.09.2016 / 15:32
6

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

[[ ]]

denota uma expressão condicional no bash

$-

significa os sinalizadores de shell. Ele conterá "i" se o shell for interativo (ou seja, você pode digitar comandos, ao contrário, ele está executando um script)

!=

significa simplesmente "diferente de".

*i*

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

return

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

&&

é o operador lógico AND . A expressão à direita, neste caso return , só será avaliada (executada) se a expressão à esquerda for verdadeira . Assim, 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 enlouquece os professores de programação quando você os usa: D

    
por delt 27.09.2016 / 19:34
2

Eu diria que é como se dissesse: se o bash não for 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 abaixo dessa linha, caso você tenha o bash aberto em um TTY.

    
por TheWanderer 24.09.2016 / 15:20