Tengo problemas para obtener alias para expandir mi cuenta de hosting cuando ejecuto un comando como:
ssh user@server "bash -c \"alias\""
Mi archivo .bashrc es:
echo .bashrc
# .bashrc
shopt -s expand_aliases
# Source global definitions (commenting this out does nothing)
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
alias php="php55"
alias composer="php ~/bin/composer.phar"
Cuando ejecuto el comando ssh anterior, veo ".bashrc" echo'd. Pero si trato de ejecutar alias, no obtengo nada.
Podría intentar "bash -ic", pero en realidad está en un script que no puedo cambiar fácilmente, y quiero saber por qué esto no funciona.
Salida de ssh user@server "bash -c \"shopt\""
.bashrc
autocd off
cdable_vars off
cdspell off
checkhash off
checkjobs off
checkwinsize off
cmdhist on
compat31 off
compat32 off
compat40 off
dirspell off
dotglob off
execfail off
expand_aliases off
extdebug off
extglob off
extquote on
failglob off
force_fignore on
globstar off
gnu_errfmt off
histappend off
histreedit off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lithist off
login_shell off
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo off
Salida de ssh user@server "bash -c \"echo $SHELL\""
.bashrc
/bin/bash
$PATH
ya~/bin:$PATH
que funciona bien.~/.local/bin
cuando/etc/profile
se procesa, lo agregará automáticamente a su RUTA. También puede justo. /etc/profile
después de crear la carpeta para agregarla a su RUTA sin reiniciar o cerrar sesión / iniciar sesión.Respuestas:
Desde la
bash(1)
página del manual:fuente
shopt -s expand_aliases
en mi .bashrc, pero eso no parece funcionar. No estoy seguro de por qué no, pero supongo que esta sería la respuesta normalmenteshopt -s expand_aliases
esté en tu.bashrc
antes de los alias? Ciertamente, su salida en la pregunta muestraexpand_aliases
esoff
.shopt
muestra apagada. Tal vez solo haya alguna configuración de servidor extraña que evite esto, no lo sé. Tengo una solución alternativa.bashrc
archivo no se obtuvo de forma predeterminada.El shell que obtienes cuando ejecutas un comando de forma remota con SSH no es un shell interactivo ni un shell de inicio de sesión:
(no hay
i
y nol
en la respuesta)En el caso de Bash, eso significa que no se lee ninguno de los archivos de inicialización habituales.
Puede forzar el shell remoto a ser un intérprete de ingreso mediante la adición
-l
a su invocación Bash, lo que significa que sería analizar el primero de~/.bash_profile
,~/.bash_login
y~/.profile
que se pueda encontrar, buscando en ese orden, pero no~/.bashrc
. Esto significa que deberá colocar sus alias en uno de esos archivos.fuente
Tuve el mismo problema, y al principio
shopt -s expand_aliases
no parecía ayudar. Lo que descubrí es que estas opciones deben establecerse antes de agregar los alias reales. Entonces, si se crean alias antes de que.bashrc
establezca lasexpand_aliases
opciones, no estarán disponibles. Por lo tanto, debe cargar (o volver a cargar) alias después de configurar la opción.fuente
bash (1) dice
entonces, obviamente, usted obtiene .bashrc manualmente o lo ejecuta con -i
Si todo lo que necesita son alias, recomendaría dividirlos en, por ejemplo, .alias y luego obtenerlos de .bashrc y de su script, en caso de que las cosas se deslicen en .bashrc que pueden romper su script, como sucede a menudo
fuente
Puede resolver cualquier problema ingresando:
en la primera linea.
fuente