¿Por qué la configuración de alias en .profile no funciona?

11

Tengo esto como la última línea en mi .profile:

alias gl="cd /home/jrenner/glances/glances"

Sin embargo, incluso después de reiniciar, aparece un comando que no se encuentra al escribir gl. ¿Qué está pasando? Estoy conectado como el usuario correcto.

talloaktrees
fuente
¿Dónde estás escribiendo gl? ¿La terminal? La GUI?
Thomas Ward
1
¿Nadie se dirigió al original por qué? pregunta. Puedo confirmar que los alias definidos en .profileno funcionan en ningún contexto que probé: inicios de sesión de consola de texto, terminales gráficos o cualquier otra cosa, aunque las variables ambientales del mismo archivo sí funcionan.
Daniel Mahler el
@DanielMahler, ¿tienes alguna razón para hacerlo?
Maged Saeed

Respuestas:

4

Estoy bastante seguro de que la idea de lpanebr funcionará, pero aquí hay una solución más elegante. Haga ese comando de alias en .bashrc Así es como lo hago, o algunas personas prefieren agregar un archivo dedicado a alias. Llámalo .aliaso lo que sea ​​y agrégalo .aliasa tu.bashrc

Ojalá pudiera formatear como @lpanelbr. Me pregunto si hay una wiki?

Jason
fuente
1
En cuanto al formato, askubuntu usa markdown. Consulte askubuntu.com/editing-help para obtener más detalles.
saji89
1
¿Por qué .bashrcfunciona mientras .profileque no? Además, ¿alguna razón por la que elegiste nombrar el archivo de alias en .alliaslugar de .alias?
Tom
# 1 Por lo que entiendo .bashrc es específico de bash y .profile es específico de la línea de comandos que no son bash. # 2 No sé a qué te refieres. Puedo deletrear después de todo. (editado)
Jason
7

Hay dos razones relacionadas por las cuales los alias no siempre funcionan cuando se colocan en el .profilearchivo. El primero es que el archivo .profile(o .bash_profile) solo se ejecuta para un shell de inicio de sesión. Si está iniciando bash en una ventana de terminal debajo de X, su emulador de terminal (por ejemplo, gnome-termanl) probablemente no esté ejecutando bash como un shell de inicio de sesión. [La mayoría tiene una opción para cambiar esto si lo desea, pero el valor predeterminado (para gnome-termal de todos modos) no es ejecutarlo como un shell de inicio de sesión.]
El shell será un shell interactivo y, por .bashrclo tanto , se ejecutará.

Sin embargo, normalmente bash se ha ejecutado como un shell de inicio de sesión cuando se iniciaba la sesión X. Entonces, si hay comandos de alias .profile, se habrán ejecutado junto con la configuración de variables de entorno como PATH, etc. Cuando se abre una ventana de terminal, se ejecuta una nueva instancia de bash para solicitar y ejecutar comandos en esa ventana de terminal. A diferencia de las variables de entorno, los alias no se pueden exportar de una instancia de bash a una nueva iniciada por ella. Por lo tanto, los alias no se pasan al nuevo shell.

Para ver esto, prueba este experimento:

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james

Tenga en cuenta que .bashrcbash no lo ejecuta cuando se inicia como un shell de inicio de sesión. Por lo tanto, poner sus alias allí no siempre funcionará a menos que su .bashrcfuente sea suya .profile, lo cual es una práctica muy común.

Tony McGregor
fuente
Verificado: añadir source .bashrcen .bash_profilepermitido que el conjunto de alias en .bashrc al trabajo.
Treefish Zhang
Parece que esta debería ser la respuesta correcta. Además, en Ubuntu solo agregue sus alias ~/.bash_aliases. Esa es la forma correcta de hacerlo. (lea el archivo .bashrc para más detalles).
Emilio M.
0

Si está utilizando bash ( echo $SHELL) como intérprete de shell, creo que es mejor (o tal vez la única forma) si define su propia función de CD.

Edite su .bashrcarchivo y agregue lo siguiente al final:

# my custom functions:
function gl () {
   cd /home/jrenner/glances/glances/
}

También podría extenderlo así:

# my custom functions:
function cdw () {
   cd /home/jrenner/glances/glances/$1
   ls
}

y cambie directamente a un subdirectorio y enumere su contenido.

lpanebr
fuente
1
Esa puede ser una buena sugerencia, pero no es una respuesta, ya que no explica por qué falla la aliasdirectiva colocada en el .profilearchivo.
Tom
0
$ bash #start a new bash instance

Este fue un problema con mi servidor. Simple source .profileno funciona por alguna razón

Mladen Janjetovic
fuente
0

La forma correcta de hacer esto en Ubuntu es agregar su alias ~/.bash_aliases. Cree el archivo si no existe.

Este archivo (si está presente) se llama desde el valor predeterminado ~/.bashrc, y el alias también estará disponible en sus emuladores de terminal.

Emilio M.
fuente