Necesito ejecutar una secuencia de comandos cuando inicio y cierre sesión en mi Ubuntu.
Traté de poner el script en mi ~/.bash_loginpero no funcionó.
¿Hay una mejor ubicación donde pueda ejecutar mi script?
Mi script está ubicado /home/gsd/script/login.shy es ejecutable.
editar:
mi script se ejecuta cuando escribo: /home/gsd/script/login.shy se establece con + x
ahora, solo tengo: touch /home/gsd/test.txten la ~/.bash_loginprueba.
el archivo test.txt nunca se crea
editar 2:
gsd@laptop:~$ ll ~/.bash*
-rw------- 1 gsd gsd 38639 2012-01-25 17:25 .bash_history
-rw-r--r-- 1 gsd gsd 29 2012-01-25 15:22 .bash_login
-rw-r--r-- 1 gsd gsd 220 2011-11-03 19:22 .bash_logout
-rw-r--r-- 1 gsd gsd 3136 2011-11-04 08:00 .bashrc

~/.bash_profile?-rw-r--r-- 1 gsd gsd 313 2012-01-22 11:56 .bash_loginchmod +x .bash_loginchmod +x .bash_login(establecer el bit ejecutable en .bash_login). El manual de Bash es un poco confuso en esta área, pero Bash no ejecuta .bash_login como un script de shell. Sí lee el archivo y luego ejecuta los comandos dentro de él (puede hacer algo similar ejecutandosource ~/.bash_login).Respuestas:
Si existe .bash_profile, Bash no leerá .bash_login (o .profile). Esta característica molesta se describe en algunas versiones del manual de Bash, pero no en todas.
.bash_profiley.bash_loginson análogos, por lo que te recomiendo que pongas tus comandos.bash_profile, porque se usa comúnmente y.bash_logines relativamente desconocido También considere poner sus comandos en.bashrclugar de.bash_profile. El manual describe la diferencia entre "shell de no inicio de sesión interactivo" y "shell de inicio de sesión interactivo", así que asegúrese de leer esa sección.El GNU Bash Reference Manual versión 4.1: Bash Startup Files dice:
También vea esta pregunta sobre el superusuario y este tutorial de Bash (No se desanime por la dirección freeunix.dyndns.org:8088 --- todavía es un manual de buena calidad y lo he usado durante años).
Actualización , ya que dice que no tiene un .bash_profile.
Parece que no está utilizando lo que se llama un "shell interactivo sin inicio de sesión" (consulte el manual de Bash para obtener una descripción detallada).
Para probar esto, añadir algo como lo siguiente cada archivo:
.bashrc,.bash_profiley.bash_login.Luego cierre sesión e inicie sesión nuevamente. Cuando inicie sesión, apuesto a que solo verá la frase "DEPURACIÓN: soy .bashrc" pero no "soy .bash_profile". Si es así, significa que usted es un "shell interactivo sin inicio de sesión", lo que simplemente significa que Bash llamará
.bashrcpero no.bash_profile. Para obtener información sobre por qué estos archivos de puntos son como son, consulte la publicación de @Andrejs Cainikovs a continuación y http://mywiki.wooledge.org/DotFilesfuente
Los shells de inicio de sesión, independientemente de si son interactivos o no, leen y ejecutan
.profileLos shells interactivos leen y ejecutan
.bashrc.A menudo verá las
/etc/profilefuentes.bashrc, por lo que todas las configuraciones realizadas.bashrctambién tendrán efecto en un shell de inicio de sesión independientemente de si es interactivo o no interactivo.El orden de ejecución de los scripts de inicialización para un shell depende de si el shell es interactivo o no interactivo y no está relacionado con si es un script de inicio de sesión o no.
Cuando se invoca bash como un shell de inicio de sesión interactivo , lee y ejecuta comandos desde
/etc/profile. Luego, Bash intentará ejecutar SOLO el primer archivo que exista y sea legible de lo siguiente:.bash_profile.bash_login.profileSi se encuentra uno de estos archivos pero no se puede leer, causará un error. No hay ningún error si NO se encuentra alguno .
Este mismo proceso se sigue cuando se invoca un shell de inicio de sesión no interactivo con la
--loginopción.fuente
.profilearchivo se lee y ejecuta solo cuando el usuario inicia sesión con la interfaz gráfica. De lo contrario, no se lee.~/.profiledefinitivamente se lee en shells de inicio de sesión no gráficos (probé al cambiar a otro terminalCtrl+Alt+F2e iniciar sesión allí)..profileno solo se lee.bashrcAsegúrese de que el script que desea ejecutar sea ejecutable. Corre
chmod +x scriptnamepara hacer eso. También asegúrese de que el script comience con el shebang correcto (#!/bin/bashpara los scripts de shell). Por último, use todas las rutas completas al ejecutarlo, por ejemplo, en/usr/bin/echolugar deechosolo en caso de que el entorno en el que se ejecutará su script no sea idéntico al que está acostumbrado.fuente
Bash solo busca
.bash_logino.profilearchivos si se ejecuta como shell de inicio de sesión interactivo. Cuando se ejecuta como un shell interactivo sin inicio de sesión, se lee.bashrc.Comúnmente es el segundo caso, es decir, cuando ejecuta
gnome-terminalbash se ejecuta como shell sin inicio de sesión.Esto indica claramente que si está iniciando en Gnome,
.bash_loginno se ejecutará. Pero si baja el nivel de ejecución para iniciar directamente en bash, el mismo archivo se ejecutará al iniciar sesión correctamente.Supongo que
.bash_logintambién se ejecutará en caso de conexiones SSH remotas.Parcialmente arrancado de aquí .
fuente