Sou um "usuário avançado" e desenvolvedor de longa data do Windows que decidiu recentemente migrar para o Mac OS X.
No OS X Lion e nas versões anteriores, parece haver duas opções principais de script e automação no OS X: AppleScript e Bash. O último é obviamente uma conseqüência direta do OS X usando o shell "bash" do Unix, enquanto o primeiro é a própria inovação da Apple. As sintaxes são claramente muito diferentes, com AppleScript tendo um estilo de linguagem pseudo-natural.
Minha pergunta é: os scripts AppleScript e Bash são comumente usados (na verdade, eles devem ser usados) para tarefas e finalidades diferentes no OS X. Estou vagamente ciente da vasta gama de tarefas que posso realizar com o script Bash, embora, é claro, o código pois alguns mais avançados podem rapidamente tornar-se complicados. Essas duas linguagens têm casos de uso sobrepostos ou quase idênticos, apesar da invenção posterior do AppleScript da Apple - ou devem ser usados com diferentes cenários em mente? Uma visão geral de alto nível, bem como alguns exemplos específicos, seriam apreciados.
fonte
Respostas:
Tanto o shell quanto o AppleScripts podem ser usados em qualquer lugar que seja apropriado.
O AppleScripts funciona melhor ao conversar com aplicativos e instalações do sistema no nível do usuário. (Por exemplo, você pode dizer
tell app "iTunes" to play
e vai, outell app "Finder" to open the first file of the second window
.)Os scripts de shell (que você mencionou bash) funcionam melhor ao conversar com objetos do sistema de baixo nível e coisas do Unixy.
Os dois são interoperáveis: você pode chamar um comando de shell do AppleScript com
do shell script "command here"
e pode chamar o código AppleScript do shell comosascript -e "AppleScript"
. Além disso, há um pouco de sobreposição entre os dois (especialmente quando se trata de operações do sistema de arquivos).Certamente, existem mais recursos para aprender scripts de shell on-line do que o AppleScript e não ajuda que o AppleScript tenha uma reputação de ser uma linguagem "somente leitura" (ou seja, mais difícil de escrever do que ler).
De qualquer forma, a maneira mais moderna de criar scripts é com o Automator, onde você pode usar o shell ou o AppleScripting (ou ambos) junto com módulos pré-criados de vários aplicativos que você instalou.
fonte
Embora um dos contextos de script possa fazer qualquer coisa que o outro possa fazer (porque os scripts de shell podem chamar
/usr/bin/osascript
para invocar um AppleScript e o AppleScript possui odo shell script
comando), de fato existem contextos nos quais um é mais adequado que o outro.Ambas as linguagens de script são linguagens de "cola" - elas próprias podem fazer o mínimo possível e, em vez disso, realizam a maioria de suas tarefas, invocando os recursos de outros programas. Os scripts de shell fazem uso de pipes Unix, enquanto o AppleScript possui a
tell application
sintaxe.Onde eles divergem é que o AppleScripts se comunica diretamente com aplicativos de script (quase sempre aplicativos de GUI), enquanto os scripts de shell se comunicam principalmente com programas de linha de comando (alguns dos quais podem chamar interfaces gráficas de usuário, mas muitos não).
Quando se trata de tarefas de gerenciamento de arquivos, ambas as abordagens podem funcionar. Pode-
Tell Application Finder
se copiar arquivos ou executar ocp
comando em um script de shell. Então, por que usar um sobre o outro? Certamente alguns roteiristas estão mais familiarizados com um idioma que o outro e, portanto, preferem usar essa ferramenta. Mas uma consideração melhor é do usuário do script. Muitas vezes, o AppleScript pode ser chamado a partir da GUI do Mac: clicando duas vezes em um aplicativo AppleScript, ou soltando arquivos em um, ou usando um menu AppleScript em todo o sistema ou em um programa específico. Programas como o Mail podem ser configurados para executar um AppleScript nas mensagens recebidas para filtrá-los. Para usuários acostumados a usar Macs de maneira "semelhante a Mac" (ou seja, na GUI), os AppleScripts geralmente são mais acessíveis.Os scripts de shell geralmente (mas nem sempre) vivem no Terminal. Se alguém já estiver usando o Terminal, executar um script de shell pode ser mais conveniente do que chamar um AppleScript. Por outro lado, muitos usuários ficam desanimados ao digitar comandos em uma janela do Terminal ou até clicar em um arquivo de script que abre uma janela do Terminal para fazer sua mágica. Pessoalmente, acho a sintaxe dos scripts de shell mais legível que a do AppleScripts, mas suspeito que eu seja uma minoria nisso. Os scripts de shell são familiares aos usuários de muitos sistemas diferentes do Unix.
De qualquer forma, ambas são ferramentas poderosas para obter melhor controle sobre o seu Mac.
fonte
Tell Application Finder
copiar arquivos abrirá uma janela com uma barra de progresso visível, enquantocp
não. Isso está certo?As outras respostas fornecem excelentes visões gerais de alto nível da intenção por trás dessas duas técnicas de script. Talvez eu só dê exemplos de como os uso.
Com a Applescript, eu criei regras de processamento para o Mail, conectei o BBEdit ao R para processamento estatístico, criei Ações de Pasta complexas e fiz uma reorganização massiva baseada em tempo de minhas fotos no iPhoto e Aperture. Também criei miniaplicativos com botões e exibições de texto. Basicamente, isso é manipulação automática de aplicativos complexos com GUIs.
Com o script Bash, criei rotinas automáticas de processamento de imagens com o Imagemagick, rotinas de processamento de PDF com Ghostscript, rotinas de hora e data e muito processamento de texto com Bash, sed / awk e Perl. Os utilitários Unix tendem a ser enxutos, rápidos e flexíveis, e o Bash é uma ótima maneira de combiná-los em ferramentas fáceis e muito poderosas.
Às vezes, chamo scripts Bash de dentro de um Applescript, geralmente para fins de processamento de texto (GREP) ou para busca leve em sites (curl). Eu quase sempre uso essa técnica para obter um pouco de dados ou uma variável para usar mais no meu Applescript.
fonte
Pode ser uma simplificação excessiva, mas o script de shell serve para combinar os programas existentes para executar novas tarefas, enquanto o AppleScript é para controlar (principalmente a GUI) os aplicativos remotamente. Os programas clássicos do Unix geralmente leem alguma entrada e produzem alguma saída e scripts de shell permitem combiná-los. AppleScript é automatizar aplicativos GUI.
fonte