Estou tentando configurar alguns atalhos de teclado que abrem sessões específicas do iTerm, o que pude fazer com o BetterTouchTool e um pouco da mágica do AppleScript. O problema é que o OS X insiste em abrir uma janela do Terminal para qualquer script de shell que você executa por meio da GUI (por exemplo, do Finder ou como um atalho de teclado do BetterTouchTool). A janela do terminal não aparece se eu executar o script diretamente de outro terminal.
Uma solução alternativa que encontrei foi agrupar o script em um diretório .app, que resolve o problema da janela supérflua do terminal, mas tem outros problemas (por exemplo, o OS X parece tratar cada janela resultante do iTerm como um aplicativo separado, sobrecarregando meu dock. ) (EDIT: este comportamento foi realmente causado por um bug no meu script, veja abaixo)
Também tentei atribuir o aplicativo Terminal a outra área de trabalho virtual nas configurações do Spaces, na tentativa de afastá-lo da vista, mas, em seguida, ele mudaria primeiro para essa área de trabalho antes de executar o script.
Existe uma maneira de desativar esse comportamento completamente? Eu já encontrei a configuração nas preferências do Terminal para fechar a janela após a conclusão do script, mas ainda é irritante fazer a janela do Terminal aparecer por um segundo.
fonte
Respostas:
Abra o Automator , escolha Aplicativo , adicione uma ação Executar Script do Shell e insira seu comando do Shell entre aspas (se você tiver um arquivo, basta arrastar e soltar).
Além de reproduzi-lo, agora você pode salvá- lo (como um aplicativo em qualquer lugar) e até definir o ícone .
fonte
&
e depois chamar um AppleScript para trazer o aplicativo (no meu casomplayer
) para a frente:mplayer myvideo.avi &; osascript -e 'tell application "System Events" to set frontmost of the first process whose displayed name is "mplayer" to true'
mplayer
para reproduzir um vídeo em uma apresentação de slides (no Skim). Há um bug que o jogador permanece em segundo plano se o Skim estiver definido como tela cheia, não tenho certeza, se esse bug está relacionado apenas ao Skim ou a todos os aplicativos em tela cheia, então imaginei que postaria minha solução aqui.Aqui está um exemplo rápido e sujo, quase sem esforço (para um aplicativo chamado "myapp"):
Faça uma hierarquia parcial de aplicativos:
Verifique se a primeira linha do seu script possui o caminho completo para o programa necessário, por exemplo,
Nomeie seu script de shell como "myapp" (sem aspas, sem extensão), conceda permissões de execução e coloque-o no subdiretório MacOS. Para conceder permissões de execução:
Vá para o subdiretório Conteúdo e crie um arquivo PkgInfo contendo a sequência: APPL ???? [sem terminador de linha no final da string!] Use o utilitário cat (1) para criar o arquivo:
Depois de digitar a string (não pressione return!), Digite dois control-D's, que fecharão
o arquivo sem terminador de linha e retornará ao prompt do shell.)
Clique duas vezes no seu novo "aplicativo" no localizador. Ele será executado sem janela.
fonte
Convém verificar o Platypus , que cria aplicativos Mac OS X a partir de scripts de shell e outros scripts interpretados.
fonte
Aqui está uma pequena solução alternativa, caso você goste de iniciantes de aplicativos como Alfred . Uso-o todos os dias e comprei o Powerpack , que permite executar scripts shell silenciosos.
Eles não abrirão um terminal durante a execução e podem ser vinculados a qualquer sequência de palavras-chave. Eles podem até incluir parâmetros e ter opções adicionais:
Eu uso isso para alguns pequenos trechos, e é muito flexível.
fonte
Se você adicionar uma chave
LSUIElement
e configurá-la como1
noInfo.plist
seu aplicativo, ele não criará um ícone no Dock.Aqui está o
Info.plist
meu pequeno aplicativo de script de shell:fonte
touch
o pacote para garantir que a versão mais recente fosse usada. Mas de qualquer maneira, eu realmente não gosto a abordagem do cabaz porque parece que sempre vai criar instâncias de aplicativos separadosdo shell script "say 'arsti'"
, isso não abrirá a janela do terminal.pgrep
e depois passa o código relevante diretamente paraosascript
(o intérprete AppleScript). O problema é quepgrep
veio do Homebrew e não está no padrão$PATH
. Portanto, meu script sempre lançava uma nova instância do iTerm, mesmo que já estivesse em execução. Depois de adicionar o caminho completo parapgrep
no script a abordagem do cabaz parece funcionar bem depois de tudo, então eu acho que eu estou feliz por agora ;-)CFBundleExecutable
eCFBundleIconFile
), consegui que funcionasse perfeitamente.Aqui está um pouco de uma solução alternativa:
Compile um AppleScript que chama um shell script :)
O
osacompile
compilará o'do shell script "XXX"'
snippet de AppleScript. Seu script de shell é o XXX.Cuidado com as citações, o script do shell deve ser citado corretamente para passar pelo shell que você está usando para compilá-lo ainda intacto.
Mas isso pode ser executado a partir do BetterTouchTool sem qualquer estranheza.
fonte
Há outro treino possível. Proteja seu script de shell em um fluxo de trabalho de automação. Invoque o fluxo de trabalho com o launchd. O código é:
Isso não iniciará nenhum programa nem aparecerá na barra de menus e será mais silencioso que um aplicativo Platypus.
Uma maneira ainda melhor de executar scripts de shell é direta no launchd.
executará o comando ultra silenciosamente em segundo plano.
fonte