Quero usar alguns aliases em um shell não interativo, depois de leresta postagemeesta postagem. Aqui está o meu comando:
bash -O expand_aliases -c 'source ~/.bashrc; <some alias>'
e aqui está o meu .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"'
Eu echo
inseri algo .bashrc
e tenho certeza de que source ~/.bashrc
funcionou, mas os aliases simplesmente se recusaram a expandir. Eu também tentei:
bash -O expand_aliases -c shopt
para garantir que a opção expand_aliases
esteja ativada.
Como faço para corrigir isso?
Responder1
A solução muito simples é usar uma função em vez de um alias. Existem muitas situações em que as funções são superiores aos aliases e, até onde posso dizer, nenhuma onde o oposto seja verdadeiro.
docker () { "/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe" "$@"; }
docker-compose () { "/mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose.exe" "$@"; }
(Recusei-me a portar seus pseudônimos ls
e echo
- eles parecem mais prejudiciais do que benéficos.)
Responder2
O .bashrc
é executado apenas para shells interativos.
Isto é o que eu fiz. Crie um novo arquivo .bash_env
em seu diretório inicial. Coloque todos os seus aliases lá, por exemplo:
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'
Em seguida, faça referência a ele .bash_profile
(coloque um nome de caminho real lá, é claro):
export BASH_ENV='/home/username/.bash_env'
(Saia e faça login para ativar)
BASH_ENV
na página de manual:
Se este parâmetro for definido quando o bash estiver executando um script de shell, seu valor será interpretado como um nome de arquivo contendo comandos para inicializar o shell, como em ~/.bashrc.
e:
Quando o bash é iniciado de forma não interativa, para executar um script de shell, por exemplo, ele procura a variável BASH_ENV no ambiente, expande seu valor se aparecer lá e usa o valor expandido como o nome de um arquivo para ler e executar .