Falha ao expandir o alias no shell não interativo

Falha ao expandir o alias no shell não interativo

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 echoinseri algo .bashrce tenho certeza de que source ~/.bashrcfuncionou, 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_aliasesesteja 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 lse 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_envem 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_ENVna 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 .

informação relacionada