No se pudo expandir el alias en el shell no interactivo

No se pudo expandir el alias en el shell no interactivo

Quiero usar algunos alias en un shell no interactivo, después de leeresta publicaciónyesta publicación. Aquí está mi comando:

bash -O expand_aliases -c 'source ~/.bashrc; <some alias>'

y aquí está mi .bashrc:

 # Bash History
 HISTSIZE=1000
 HISTFILESIZE=2000
 # Colorful Prompt
 PS1='\[\033[01;34m\]\w\n\[\033[01;32m\]\u@\h\[\033[00m\] > '
 # Aliases
 alias ls='ls --color=auto -A -I NTUSER.\* -I ntuser.\*'
 alias echo='echo -e'
 alias docker='"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'
 alias docker-compose='"/mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose.exe"'

Ingresé echoalgo .bashrcy estoy seguro de que source ~/.bashrcfuncionó, pero los alias simplemente se negaron a expandirse. También probé:

bash -O expand_aliases -c shopt

para asegurarse de que la opción expand_aliasesesté activada.

¿Cómo puedo solucionar esto?

Respuesta1

La solución muy sencilla es utilizar una función en lugar de un alias. Hay muchas situaciones en las que las funciones son superiores a los alias y, hasta donde puedo decir, en ninguna ocurre lo contrario.

 docker () { "/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe" "$@"; }
 docker-compose () { "/mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose.exe" "$@"; }

(Me he negado a transferir su alias lsy echoel suyo; parecen más perjudiciales que beneficiosos).

Respuesta2

Se .bashrcejecuta solo para shells interactivos.

Esto es lo que he hecho. Cree un nuevo archivo .bash_enven su directorio de inicio. Coloque todos sus alias allí, por ejemplo:

shopt -s expand_aliases
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'

Luego haga referencia a él en su .bash_profile(ponga un nombre de ruta real allí, por supuesto):

 export BASH_ENV='/home/username/.bash_env'

(Cerrar sesión e iniciar sesión para activar)


BASH_ENVen la página de manual:

Si este parámetro se establece cuando bash ejecuta un script de shell, su valor se interpreta como un nombre de archivo que contiene comandos para inicializar el shell, como en ~/.bashrc.

y:

Cuando bash se inicia de forma no interactiva, para ejecutar un script de shell, por ejemplo, busca la variable BASH_ENV en el entorno, expande su valor si aparece allí y usa el valor expandido como el nombre de un archivo para leer y ejecutar. .

información relacionada