Bash: Use um alias em uma variável

9

Eu estou escrevendo um script bash que executa cada um dos seus argumentos como um comando. Isso funciona para comandos no meu PATH , mas não para aliases. Eu posso chamar diretamente um alias no script, mas não posso chamar um alias que tenha sido passado como argumento.

O problema (eu suponho) é que os aliases são expandidos antes das variáveis. Existe uma maneira de executar aliases de uma variável?

Exemplo de script:

#!/bin/bash
# File: runall

shopt -s expand_aliases
source ~/.aliases

while (( "$#" )); do
    $1
    shift
done

runall "echo test" funciona, mas runall "myalias"runall: line 8: myalias: command not found

    
por Jayson 15.02.2012 / 18:38

2 respostas

9

Após alguns testes, concluí o seguinte:

  • Os aliases funcionam apenas no modo interativo (adicione -i ao shebang).
  • Os aliases não são avaliados quando vêm de uma fonte interpretada (neste caso, a variável.
  • Você pode obter o bash para usar o alias com eval $1 . Note que eval ing qualquer coisa criada com uma variável é perigoso, mas desde que todo o ponto do script requer execução arbitrária, eu não farei um grande sucesso com isso.

Na página do bash man:

Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt (see the description of shopt under SHELL BUILTIN COMMANDS below).

Você pode adicionar shopt -s expand_aliases em vez de -i .

Além disso,

Aliases are expanded when a command is read, not when it is executed.

Como as variáveis não são expandidas antes de o comando ser lido, elas não serão mais expandidas usando o alias.

    
por 15.02.2012 / 19:10
1

Eu tive um problema semelhante e resolvi meu problema transformando meus aliases em funções, conforme descrito em este site , que funcionou para mim.

por exemplo,

alias lsd="ls -lash"

para

function lsd() { ls -lash; }
    
por 26.08.2016 / 02:35

Tags