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.
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?)
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.
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.