¿Dónde encontrar el archivo .bashrc en Mac OS X Snow Leopard and Lion?

89

Quiero instalar rvm en mi máquina Snow Leopard.

Dice que necesito agregar una línea a mi .bashrcarchivo (estoy usando bash) pero ¿dónde está mi .bashrcarchivo?

Yuval
fuente
1
Debería poner su solución en una respuesta y aceptarla (tendrá que esperar uno o dos días antes de que SU le permita hacerlo) De esa manera, las personas con el mismo problema pueden ver la pregunta y ver que tiene una respuesta.
Nifle
1
Su solución no es diferente de la respuesta más votada ..
David Cowden
Solo para asegurarme de que este no es un problema de "Linux = .bashrc vs. Mac OS =. (Bash_) profile", los archivos de inicio de shell funcionan igual en Linux y Mac y el archivo .bashrc es el lugar más apropiado para la sesión ajustes específicos usa, por ejemplo, tmux o screen, es posible que no tenga sesiones de inicio de sesión, pero aún desea sus alias. La razón por la que Mac se siente diferente es que la mayoría de las distribuciones de Linux incluyen scripts de perfil del sistema o perfiles de esqueleto que ya delegan bashrc (fuente).
eckes

Respuestas:

78

Con respecto al problema .bashrcanterior:

En la mayoría de los sistemas, ~/.bashrcsolo se usa al iniciar un shell interactivo sin inicio de sesión . Sin embargo, cuando inicia un nuevo shell, a menudo es un shell de inicio de sesión interactivo . Como se trata de un shell de inicio de sesión , .bashrcse ignora. Para mantener el ambiente consistente entre la falta de inicio de sesión y de ingreso de conchas, debe fuente el .bashrcde su .profileo su .bash_profile.

Consulte el Manual de referencia de Bash, sección 6.2 Archivos de inicio de Bash

Se invoca como un shell de inicio de sesión interactivo o con --login

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.

Se invoca como un shell interactivo sin inicio de sesión

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.

Entonces, típicamente, su ~ / .bash_profile contiene la línea

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

después (o antes) de cualquier inicialización específica de inicio de sesión.

En mi Mac (Running Leopard), no había línea a la fuente ~/.bashrc. Tuve que agregar esta funcionalidad por mi cuenta.

En algunos sistemas y otros sistemas operativos, .bashrcse obtiene de global /etc/profileo /etc/bash_profile, o se hace usando los archivos de plantilla de /etc/skel.

Para ser honesto, la distinción entre .bashrcy .bash_profileno es bien entendida por la comunidad. Cuando muchos desarrolladores dicen "Agregue esto a su .bashrc", lo que realmente quieren decir es "Agregue esto a su .bash_profile". Quieren que la funcionalidad se agregue a su shell de inicio de sesión (que es .bash_profile), no a su shell de no inicio de sesión . En realidad, generalmente no importa y .bashrces aceptable colocar la configuración .

Stefan Lasiewski
fuente
Este enlace ofrece una buena descripción de los tipos de shells y cuándo se cargan los archivos de inicio - hacktux.com/bash/bashrc/bash_profile
studgeek
¿Qué se entiende por "fuente" aquí?
elgrego
@elgrego, aquí hay una buena descripción: cuando se obtiene un archivo (escribiendo el nombre del archivo fuente o. nombre del archivo en la línea de comando), las líneas de código en el archivo se ejecutan como si se hubieran impreso en la línea de comando. Ver tldp.org/HOWTO/Bash-Prompt-HOWTO/x237.html
Stefan Lasiewski el
60

Resulta que en Mac OS X Snow Leopard y Mac OS X Lion, el archivo que se carga se llama .profile, no .bashrc.

Lo que desea hacer es crear un archivo ~/.profiley llamarlo .profile (si aún no existe).

Ponga allí toda la información que necesita para cargar con cada instancia de bash (Gracias, el píxel púrpura).

Un par de notas al margen:

  1. El punto delante del archivo lo marca como invisible para Finder y el comando ls por defecto. Para listar los archivos invisibles utilizando el comando ls de la terminal, utilice el -acomo un parámetro como tal:ls -a
  2. El ~símbolo representa /Users/YourUserNamedonde YourUserName es el nombre corto de su nombre de usuario.

Editar: Chris Page observa (correctamente) que lo que coloque en un archivo .profile se aplicará a cualquier shell que esté usando (es decir, zhs, bash, etc.). Si desea que el contenido afecte solo al shell bash, coloque el contenido en un .bash_profilearchivo en lugar de un .profilearchivo.

Yuval
fuente
55
Su pregunta fue respondida [correctamente] el 1 de junio de 2010, un día después de haberla formulado. Más de un año después, regresa y proporciona exactamente la misma respuesta y acepta su propia respuesta ...
David Cowden
3
En realidad, su respuesta agrega más detalles que la respuesta dada el 1 de junio de 2010. Él aborda específicamente el problema en Mac OS X, que me pareció útil.
webworm
3
Tenga en cuenta que si .bash_profileya existe un directorio de inicio, ¡el .profilearchivo no se leerá!
Phani
Tengo una nueva instalación de Mac Os El capitan. No hay archivo de perfil . Simplemente crea un archivo .profile y funciona. Personalmente renombré mi .bashrc a .profile.
Nicolas Thery
4

Tienes que hacer la tuya .bashrc. Simplemente puede usar un editor de texto para crear un archivo llamado .bashrc(sin extensión) con el contenido que desee y guardarlo en su directorio de inicio ( /Users/YourUserName/).

ardilla
fuente
1
en realidad, eso no funcionó, pero me enviaste en la dirección correcta diciéndome que creara mi propio archivo. El archivo que funcionaba en una configuración de Snow Leopard era .profile, no .bashrc (que por alguna razón no está cargado en este sistema operativo). Publicaré instrucciones detalladas en la pregunta. ¡Gracias!
Yuval
@Yuval: Por defecto, a .bashrcfuncionará, pero solo si no hay .profile. Sin ~/.profileembargo, supongo que existe por defecto. Me alegro de poder ayudar! (Y debe poner su solución en una respuesta y aceptarla para futuros lectores de esta pregunta).
ardilla
Creo que su comentario solo si no hay .profile es incorrecto. .bashrc funcionará dentro de un shell interactivo sin inicio de sesión, o si proviene de .profile (.bash_profile es probablemente un lugar mejor, ya que .profile es para el shell Bourne). .profile se usa durante un shell interactivo sin inicio de sesión.
Stefan Lasiewski
@Stefan Eso suena correcto, entonces. No soy un experto :)
squircle 01 de
2
Nadie es ;). Estas cosas (.bashrc vs .profile vs. .bash_profile vs. .bash_login vs. shell de inicio de sesión interactivo vs shell interactivo de no inicio de sesión vs shell no interactivo) son confusas, y están rotas y anuladas por muchos Unixes y scripts de shell.
Stefan Lasiewski
3

Encuentro que en mi OS 10.6.5 la configuración de bash está en "/ etc / bashrc". Creo que estas son las especificaciones de nivel superior para Shell.

Sin embargo, necesita una cuenta raíz para modificarla. Las especificaciones locales por usuario "~ / .bashrc" deben comenzar con el siguiente fragmento, para leer y cargar la configuración de bash a nivel del sistema:

if [ -r /etc/bashrc ]; then
    . /etc/bashrc 
fi

Normalmente agrego alias en el nivel de sistema bashrc para que todos los usuarios puedan acceder a ellos también. A menos que no quieran usar sus atajos y alias.

¡Buena suerte!

geekborj
fuente
2
/ etc / profile (ejecutado por shells de inicio de sesión) es un script de inicio de bash global que se aplica a todos los usuarios y proporciona comportamientos predeterminados para los shells de inicio de sesión. A su vez, ejecuta / etc / bashrc, que contiene personalizaciones que se aplican tanto a los shells de inicio de sesión como de inicio de sesión. Del mismo modo, los usuarios individuales deberían crear un archivo ~ / .bash_profile que ejecute ~ / .bashrc, que es donde deberían estar la mayoría de las personalizaciones, y ~ / .bashrc debería ejecutar / etc / bashrc para heredar comportamientos predeterminados para shells que no son de inicio de sesión.
Chris Page
1
Para usuarios individuales, es mejor agregar estas personalizaciones a su directorio de inicio en ~/.bashrc, no /etc/bashrc. /etc/bashrcson las configuraciones globales para todos los usuarios en su sistema, que probablemente no sea lo que desea. Además, Apple puede aparecer y cambiar /etc/bashrcperiódicamente, lo que podría arruinar sus personalizaciones.
Stefan Lasiewski
1

Use el archivo .profile para agregar todo lo que agregaría a un archivo .bashrc de Linux.

Por ejemplo

PATH=/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/:/opt/local/bin:/opt/depot_tools/:~/bin:$PATH
alias t='/Users/<username>/.todo/todo.sh'
alias punch='python /Users/<username>/.todo/Punch.py'
alias clock='cat </dev/tcp/time.nist.gov/13'
alias sudotext="sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit" 
acelera las imágenes
fuente
2
Le recomiendo que use ~ / .bash_profile (en lugar de ~ / .profile) a menos que esté seguro de que desea que sus personalizaciones surtan efecto en otros shells y que sean compatibles.
Chris Page
Solo para asegurarme de que este no es un problema de "Linux = .bashrc vs. Mac OS =. (Bash_) profile", los archivos de inicio de shell funcionan igual en Linux y Mac y el archivo .bashrc es el lugar más apropiado para la sesión ajustes específicos usa, por ejemplo, tmux o screen, es posible que no tenga sesiones de inicio de sesión, pero aún desea sus alias. La razón por la que Mac se siente diferente es que la mayoría de las distribuciones de Linux incluyen scripts de perfil del sistema o perfiles de esqueleto que ya delegan bashrc (fuente).
eckes