Quiero ssh en una computadora Ubuntu remota, buscar mi .bashrcy ejecutar un comando que depende de los parámetros establecidos por eso .bashrc. Todo eso en un shell interactivo que no se cierra después de que se realiza el comando.
Lo que intenté hasta ahora es
ssh user@remote_computer -t 'bash -l -c "my_alias;bash"'
o solo
ssh user@remote_computer -t "my_alias;bash"
Esto funciona para comandos generales (como lspor ejemplo) pero cuando intento ejecutar un alias definido en .bashrcaparece un error:
bash: my_alias: command not found
Pero luego, cuando lo escribo de nuevo manualmente y lo ejecuto, ¡funciona!
Entonces, ¿cómo puedo asegurarme de que la .bashrcfuente se obtiene antes de que se llame al comando?

Respuestas:
El problema es que está intentando ejecutar un alias en un shell no interactivo. Cuando ejecuta
ssh user@computer command,commandse ejecuta de forma no interactiva.Los shells no interactivos no leen alias (de man bash):
Funciona si lo ejecuta de nuevo manualmente porque el
bashcomando final inicia un shell interactivo para que sus alias estén ahora disponibles.Como alternativa, puede iniciar un shell interactivo (
bash -i) en lugar de un simple shell de inicio de sesión (bash -l) en la máquina remota para ejecutar su alias:Sin embargo, este parece un enfoque muy complicado. No ha explicado por qué exactamente necesita hacer esto, pero considere estas alternativas:
Simplemente inicie un shell interactivo de inicio de sesión normal en la máquina remota y ejecute el comando manualmente:
Si siempre desea que se ejecute ese alias cuando se conecta a esta computadora, edite el
~/.profile(o~/.bash_profile, si está presente) de la computadora remota y agregue esta línea al final:Debido a que
~/.profilese lee cada vez que se inicia un shell de inicio de sesión (sshpor ejemplo , cada vez que se conecta , por ejemplo), eso harámy_aliasque se ejecute cada vez que se conecte.Tenga en cuenta que, de forma predeterminada, los shells de inicio de sesión leen
~/.profileo~/.bash_profileignoran~/.bashrc. Algunas distribuciones (Debian y sus derivados y Arch, por ejemplo) distribuciones como Ubuntu tienen su fuente predeterminada~/.profileo de~/.bash_profilearchivos, lo~/.bashrcque significa que sus alias definidos~/.bashrctambién estarán disponibles en un shell de inicio de sesión. Esto no es cierto para todas las distribuciones, por lo que es posible que tenga que editar su~/.profilemanual para tener su fuente~/.bashrc. También tenga en cuenta que si~/.bash_profileexiste,~/.profileserá ignorado por bash.fuente
~/.basyrcse lee automáticamente~./profile, por lo que cualquier alias definido en~/.bashrctambién estará disponible para cualquier lectura de shells~/.profile. Todo lo que realmente necesitaba hacer para que esto funcionara era iniciar explícitamente un shell interactivo (-i).Tuve que comentar una parte de mi .bashrc que impedía el uso de alias y agregar un comando expand_aliases. Esto fue comentado
Y esto fue agregado
Entonces mi comando funcionó:
fuente