¿Qué significa "[[$ -! = * I *]] && return"?

22

Tengo esta línea en mi .bashrcy me gustaría saber qué significa exactamente esto

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

Respuestas:

33
  • $- significa 'banderas actuales'.
  • echo $-devuelve "himBH". Esos son todos los valores predeterminados.
  • entonces ... en [[ $- != *i* ]] && returnrealidad hace lo que dice arriba en un comentario: comprueba si el indicador interactivo está configurado. El [[y]] lo convierte en un booleano, por lo que termina en un "verdadero" o "falso". "false && return" hace que continúe "true && return" hace que ejecute la devolución.

Las banderas predeterminadas se explican con más detalle:

h es para "hash all": esto le dice a bash que recuerde las ubicaciones de los comandos que ha encontrado al consultar su RUTA.

i es para "interactivo": ingresar entradas y recuperar salidas.

m es para "monitor": esto permite el control del trabajo

B es para "llave de expansión". Esto le permite usar la expansión de llaves

H es para "expandir la historia". Esto es lo que le permite volver a ejecutar un comando desde su historial al anteponer su número con un signo de exclamación


Por cierto. Yo tengo ...

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

Básicamente hace lo mismo pero más fácil de leer, supongo.

Rinzwind
fuente
6

Básicamente significa "Si las banderas de shell no contienen una letra minúscula i, entonces pare la función / script aquí".

[[ ]]

denota una expresión condicional en bash

$-

significa las banderas de concha. Contendrá "i" si el shell es interactivo (es decir, puede escribir comandos, en lugar de ejecutar un script)

!=

simplemente significa "no es igual a".

*i*

es un patrón comodín que coincide con cualquier cosa que contenga "i"

return

sin ningún argumento solo significa detener la ejecución de la función o script actual.

&&

es el operador lógico AND . La expresión de la derecha, en este caso return, solo se evaluará (ejecutará) si la expresión de la izquierda es verdadera . Entonces, en muchos lenguajes de programación, a && bes una abreviatura de if a then b: esto se llama "evaluación de cortocircuito" y enloquece a los maestros de programación cuando lo usas: D

delt
fuente
2

Supongo que es como dice: si bash no está abierto en un shell interactivo, entonces no hagas nada.

No conozco toda la función, pero probablemente haya comandos e indicadores establecidos debajo de esa línea en caso de que tenga bash abierto en un TTY.

El vagabundo
fuente
gracias :) pero estoy deseando saber qué es exactamente $-y *i*y cómo averiguar si su modo interactivo o no
Severo Tux