Tengo esta línea en mi .bashrc
y me gustaría saber qué significa exactamente esto
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Tengo esta línea en mi .bashrc
y me gustaría saber qué significa exactamente esto
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Respuestas:
$-
significa 'banderas actuales'.echo $-
devuelve "himBH". Esos son todos los valores predeterminados.[[ $- != *i* ]] && return
realidad 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.
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 && b
es 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
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.
$-
y*i*
y cómo averiguar si su modo interactivo o no