Como executar um parâmetro como um alias em um script de shell?

2

Eu tenho um apelido alias ll='ls -lF' ;

Eu criei um script bash temp.sh :

#!/bin/bash 

# Allow aliases to work in bash NON-interactive mode!
shopt -s expand_aliases

# .. and load them
source ~/.bash_aliases

mas quando eu corro isso me dá:

$ ./temp.sh ll
./temp.sh: line 10: ll: command not found

e quando eu mudar o script e colocar o alias diretamente:

#!/bin/bash 

# Allow aliases to work in bash NON-interactive mode!
shopt -s expand_aliases

# .. and load them
source ~/.bash_aliases
ll

... está funcionando:

$ ./temp.sh   
total 12
-rwxrwxr-x 1 sobi3ch sobi3ch 423 Apr 19 14:21 script.sh*
-rwxrwxr-x 1 sobi3ch sobi3ch 196 Apr 26 12:28 temp.sh*
-rwxrwxr-x 1 sobi3ch sobi3ch 173 Apr 26 12:02 script2.sh

... também quando executo o comando alias no script, em vez de ll (ou ), posso ver o alias para ll entre todos os aliases.

Por que meu alias não funciona quando eu o passo como parâmetro?

    
por sobi3ch 26.04.2016 / 12:32

1 resposta

2

Isso não é explicitamente apontado na documentação (pelo menos em nenhum lugar que eu possa notar), mas o problema é que a expansão de alias tem precedência sobre a expansão de variáveis; Isso significa que o token é verificado para ver se corresponde a um alias, descartado como um possível alias e somente depois disso expandido como um parâmetro. Como não há nenhum comando chamado ll , os erros de Bash são eliminados.

Você pode usar eval para fazer o parâmetro expandir duas vezes, a primeira vez como um parâmetro e a segunda vez como um alias:

#!/bin/bash 

# Allow aliases to work in bash NON-interactive mode!
shopt -s expand_aliases

# .. and load them
source ~/.bash_aliases
eval ""
~$ cat temp.sh 
#!/bin/bash 

# Allow aliases to work in bash NON-interactive mode!
shopt -s expand_aliases

# .. and load them
source .bash_aliases
eval ""  
~$ cat .bash_aliases 
alias ll='ls -l'
~$ ./temp.sh ll
drwxrwxr-x  3 user user 4096 apr 24 15:18 articles
drwxrwxr-x  2 user user 4096 apr 24 00:20 bin
drwxr-xr-x  2 user user 4096 apr 21 20:22 Documenti
-rw-r--r--  1 user user 8980 apr 21 20:18 examples.desktop
drwxr-xr-x  2 user user 4096 apr 21 21:59 Immagini
drwxr-xr-x  2 user user 4096 apr 21 20:22 Modelli
drwxrwxr-x  6 user user 4096 apr 23 20:45 MT7630E
drwxr-xr-x  2 user user 4096 apr 21 20:22 Musica
drwxr-xr-x  2 user user 4096 apr 21 20:22 Pubblici
drwxr-xr-x  2 user user 4096 apr 24 23:02 Scaricati
drwxr-xr-x  2 user user 4096 apr 24 13:44 Scrivania
-rwxrwxr-x  1 user user  149 apr 26 13:22 temp.sh
drwxrwxr-x  2 user user 4096 apr 26 13:22 tmp
drwxrwxr-x 24 user user 4096 apr 23 13:45 util-linux-2.28
drwxr-xr-x  2 user user 4096 apr 21 20:22 Video
    
por kos 26.04.2016 / 13:26