Existe alguma maneira de fazer o trabalho de expansão do alias dentro se… fi no Bash?

5

Verifique este script:

#!/bin/bash
if true;then
    alias WeirdTest='uptime';shopt -s expand_aliases
    WeirdTest
fi
WeirdTest

Na primeira vez em que WeirdTest é executado, diz "comando não encontrado".

    
por Aquarius Power 02.07.2014 / 01:54

1 resposta

9

Esta é uma limitação do bash. Citando o manual:

The rules concerning the definition and use of aliases are somewhat confusing.

O Bash expande os aliases quando lê um comando. Um comando, nesse sentido, consiste em comandos completos (todo o bloco if … fi é um comando composto) e linhas completas (portanto, se você escreveu … fi; WeirdTest em vez de colocar uma nova linha após fi , a segunda ocorrência de WierdTest não seria expandido também). Em seu script, quando o comando if está sendo lido, o WeirdTest alias ainda não existe.

Uma solução possível é definir uma função:

if …; then
  WeirdTest () { uptime; }
  WeirdTest
fi
WeirdTest

Se você quiser usar um alias para poder chamar um comando externo com o mesmo nome, você pode fazer isso com uma função adicionando command antes.

WeirdTest () { command WeirdTest --extra-option "$@"; }
    
por 02.07.2014 / 02:06

Tags