Falha ao expandir o alias no shell não interativo

0

Eu quero usar alguns aliases em um shell não interativo, depois de ler este post e este post . Aqui está o meu comando:

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

e aqui está meu .bashrc :

 # Bash History
 HISTSIZE=1000
 HISTFILESIZE=2000
 # Colorful Prompt
 PS1='\[3[01;34m\]\w\n\[3[01;32m\]\u@\h\[3[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 ed algo em .bashrc e tenho certeza que source ~/.bashrc funcionou, mas os alias recusaram-se a expandir. Eu também tentei:

bash -O expand_aliases -c shopt

para garantir que a opção expand_aliases esteja ativada.

Como corrijo isso?

    
por Elderry 17.04.2017 / 07:17

2 respostas

1

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 eu posso dizer, nenhum é o oposto.

 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 aliases ls e echo - eles parecem mais prejudiciais do que bons.)

    
por 17.04.2017 / 19:19
0

O .bashrc é executado apenas para shells interativos.

Isso é 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, referencie-o no seu .bash_profile (coloque um caminho real lá, é claro):

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

(faça logout e login para ativar)

BASH_ENV na página de manual:

If this parameter is set when bash is executing a shell script, its value is interpreted as a filename containing commands to initialize the shell, as in ~/.bashrc.

e:

When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute.

    
por 17.04.2017 / 08:02