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é echo
algo .bashrc
y estoy seguro de que source ~/.bashrc
funcionó, 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_aliases
esté 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 ls
y echo
el suyo; parecen más perjudiciales que beneficiosos).
Respuesta2
Se .bashrc
ejecuta solo para shells interactivos.
Esto es lo que he hecho. Cree un nuevo archivo .bash_env
en 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_ENV
en 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. .