Por que um alias funciona no Terminal, mas não quando chamado de um script?

1

Adicionei o seguinte ao meu ~ / .bash_profile

# opens "flashlog.txt" in Console
alias trace='open -a /Applications/Utilities/Console.app/ ~/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt'

# clears "flashlog.txt"
alias cleartrace='cat /dev/null > ~/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt'

Portanto, no Terminal, posso inserir o comando "trace" e visualizar o arquivo flashlog.txt no console. Eu também posso inserir o comando "cleartrace" e o flashlog.txt está desmarcado. Isso funciona muito bem.

No entanto, se eu criar um novo script bash com o seguinte, recebo um erro "cleartrace: command not found":

#!/bin/bash
cleartrace
cp -v -f ActivityLauncher.swf ../launchers/addu02l05_launcher_1.swf
open "/Applications/Adobe Flash CS4/Players/Flash Player.app" ./test.swf 

Por que um alias funciona no Terminal, mas não quando chamado de um script? (Como faço para corrigir isso?)

    
por Michael Prescott 10.02.2010 / 16:18

2 respostas

4

Isso ocorre porque o bash apenas lê ~ / .bash_profile para shells interativos. Mova suas definições de alias para ~ / .bashrc e isso deve funcionar. Dê uma olhada na seção INVOCATION da bash manpage para mais detalhes sobre como tudo isso funciona.

    
por 10.02.2010 / 16:45
2

O arquivo de informações do Bash diz:

For almost every purpose, shell functions are preferred over aliases.

Funções podem ser exportadas, por um lado.

    
por 10.02.2010 / 17:30