[]
es atajo de test
comando.
De acuerdo a man test
:
-t FD
Verdadero si FD es un descriptor de archivo asociado con un terminal.
Entonces, si ejecuta bash como shell interactivo (terminal, consulte este hilo para obtener una explicación de la terminología), bash será reemplazado por zsh.
Más información sobre los archivos .bash *:
Cuando se invoca bash como un shell de inicio de sesión interactivo , o como un
shell no interactivo con la opción --login , primero lee y ejecuta comandos del archivo / etc / profile, si ese archivo existe. Después de leer ese archivo, busca ~ / .bash_profile, ~ / .bash_login y ~ / .profile, en ese orden, y lee y ejecuta comandos del primero que existe y es legible. La opción --noprofile se puede usar cuando se inicia el shell para inhibir este comportamiento.
Cuando sale un shell de inicio de sesión , bash lee y ejecuta comandos de los archivos ~ / .bash_logout y /etc/bash.bash_logout, si los archivos existen.
Cuando se inicia un shell interactivo que no es un shell de inicio de sesión , bash lee y ejecuta comandos desde ~ / .bashrc , si ese archivo existe. Esto puede inhibirse utilizando la opción --norc. La opción de archivo --rcfile obligará a bash a leer y ejecutar comandos desde el archivo en lugar de ~ / .bashrc.
Comentario de Stéphane Chazelas:
Tenga en cuenta que un shell puede ser interactivo sin que stdout sea un terminal, y un shell puede no ser interactivo con un terminal en stdout (como cada vez que ejecuta un script dentro de un terminal sin redirigir / canalizar su salida), y bash
puede leer .bashrc
incluso cuando no es interactivo (como en ssh host cmd
dónde bash
está el shell de inicio de sesión del usuario en el host, o bash --login -c 'some code'
). case $- in *i*)...
es la forma correcta de probar si un shell es interactivo.
bash
puede leer.bashrc
incluso cuando no interactivo (como enssh host cmd
dóndebash
está el shell de inicio de sesión del usuario en el host obash --login -c 'some code'
dónde están las.bash_profile
fuentes.bashrc
).case $- in *i*)...
es la forma correcta de probar si un shell es interactivo.