Agregué esto a mi .bash_profile pero olvidé etiquetarlo y olvidé lo que significa exactamente

4

Recuerdo en general lo que hace, pero no específicamente:

    if [ -f ~/.bashrc ]; then
    source ~/.bashrc
    fi

¿Cuál es el propósito exacto de nuevo?

    
pregunta user52470 02.12.2013 - 17:32

2 respuestas

4

Esto genera un archivo ~/.bashrc si existe y carga el contenido de ese archivo.

La respuesta breve a tu pregunta es: hiciste esto, no importa cómo llegues a tu máquina, a través de un shell abierto en una sesión de escritorio interactiva o un inicio de sesión ssh a la máquina, tu shell bash tiene una configuración consistente a ello.

La respuesta más larga de por qué tuvo que hacerlo de esta manera se encuentra a continuación ...

La razón por la que querría hacer esto está impregnada de bash history: uno de esos archivos se usa para inicios de sesión interactivos, el otro se usa para inicios de sesión no interactivos. La idea de tener dos configuraciones diferentes es que es posible que desee algunas cosas en su shell interactivo (un indicador elegante, un mensaje del día, colorización de la salida de sus comandos, etc.) que no desearía en una sesión no interactiva porque dispara el acceso programático a entrada y salida y lo que no.

Para la mayoría de los usuarios, aunque desea que ambos entornos sean iguales. La mayoría de nosotros no estamos ejecutando configuraciones bash lo suficientemente complicadas como para justificar la separación de configuraciones interactivas y no interactivas como esta.

El .bash_profile se ejecuta para shells de inicio de sesión, mientras que .bashrc se ejecuta para shells interactivos sin inicio de sesión.

Hay un un buen artículo de Josh Staiger que habla sobre por qué uno sobre el otro y cómo recordar dónde poner las cosas . Permítame citar algunos de ellos aquí:

  

¿Qué es un shell de inicio de sesión o no de inicio de sesión?

     

Cuando inicia sesión (escriba el nombre de usuario y la contraseña) a través de la consola, ya sea sentado en la máquina, o de forma remota a través de ssh : se ejecuta .bash_profile para configurar su shell antes de la solicitud de comando inicial.   Pero, si ya ha iniciado sesión en su máquina y abre una nueva ventana de terminal ( xterm ) dentro de Gnome o KDE, entonces se ejecuta .bashrc antes del indicador de comandos de la ventana. .bashrc también se ejecuta cuando inicia una nueva instancia de bash escribiendo /bin/bash en un terminal.

     

Mac OS X: una excepción

     

Una excepción a las pautas de la ventana de terminal es Terminal.app de Mac OS X, que ejecuta un shell de inicio de sesión de forma predeterminada para cada nueva ventana de terminal, llamando a .bash_profile en lugar de .bashrc . Otros emuladores de terminal GUI pueden hacer lo mismo, pero la mayoría tiende a no hacerlo.

     

Recomendación

     

La mayoría de las veces no desea mantener dos archivos de configuración separados para shells de inicio de sesión y de no inicio de sesión: cuando establece una RUTA, desea que se aplique a ambas. Puede solucionar este problema obteniendo .bashrc de su archivo .bash_profile , luego poniendo PATH y la configuración común en .bashrc .

     

Para hacer esto, agregue las siguientes líneas a .bash_profile:

if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi
     

Ahora, cuando inicies sesión en tu máquina desde una consola, se llamará .bashrc .

    
respondido por el Ian C. 02.12.2013 - 17:50
0

Vea la descripción de Ian C de lo que hace la línea de origen

Esto está rodeado por una declaración if

if x; then
  ....
fi

esto comprueba en x y luego ejecuta el código entre then y fi (la idea de fin de finalización y si y otras finalizaciones invirtiendo la palabra clave de inicio se usa en sh y shells relacionados.

La comprobación que se realiza aquí es [ -f ~/.bashrc ] , que es lo mismo que test -f .bashrc el if le dice a la prueba que devuelva true si lo que sigue es un archivo y existe.

Así que el código sobre dice que si hay un .bashrc ejecutarlo en su shell circular.

    
respondido por el Mark 02.12.2013 - 21:45

Lea otras preguntas en las etiquetas