Existe alguma maneira fácil de acrescentar argumentos de linha de comando a um aplicativo em um Mac? Por exemplo, para executar o Opera no modo quiosque ou usar um perfil diferente no Firefox, posso digitar
$ /Applications/Opera.app/Contents/MacOS/Opera -kioskmode
$ /Applications/Firefox.app/Contents/MacOS/firefox -P profilename -no-remote
No Windows, posso anexar os argumentos às propriedades do atalho, mas como os Macs não usam o atalho por si só e executam os aplicativos diretamente, isso não é possível.
Eu descobri que iniciar os aplicativos através do bash ou do Applescript funciona parcialmente:
# Bash
#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote
# Applescript
do shell script "exec /Applications/Opera.app/Contents/MacOS/Opera -kioskmode"
Posso torná-los executáveis e atribuir um ícone e tudo funciona muito bem, exceto quando eu executo um desses pseudo programas, uma janela do terminal ou um ícone do Applescript permanece aberto enquanto o aplicativo estiver aberto. Presumivelmente, o uso do comando Applescript open
evitaria isso, mas como não estou executando o aplicativo como ele está empacotado (apenas /Applications/Firefox
), ele não funciona.
Portanto, existe uma maneira melhor de executar aplicativos com argumentos de linha de comando? Caso contrário, existe uma maneira de impedir que uma sessão de terminal persistente ou o ícone da Applescript permaneça aberto enquanto o aplicativo está aberto?
Editar
De acordo com uma página do Mozilla Wiki , é melhor usar um script para executar o aplicativo com argumentos. Adicionar um &
ao final do script mata a janela persistente do Terminal. O único aborrecimento agora é que ele abre uma janela do Terminal morta e desconectada (que é melhor que a persistente, mas ainda assim ...)
#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote &
fonte
&
ele ainda pertencente ao Terminal, pode corrigi-lo adicionando a linhadisown %/Applications/Firefox.app/Contents/MacOS/firefox
depois de executá-lo e, em seguida, pode fechar o Terminal com segurança, usando AppleScript.Respostas:
Aqui está minha melhor solução: Crie um Applescript com:
E salve-o como um aplicativo .
Você pode colocar qualquer aplicativo com quaisquer argumentos na primeira parte. A parte após as
&
necessidades de matar o que você nomeou como seu script + .app. Você verá o aplicativo de script piscando no banco dos réus, mas depois desaparecerá.Nota: O script não funcionará corretamente quando executado no Editor de scripts, somente quando executado no aplicativo de script que você criou.
fonte
A partir do OS X 10.6.2, o comando open pode passar argumentos para o aplicativo que ele abre por meio do sinalizador --args. Um AppleScript para usá-lo se parece com isso:
Isso deve lhe dar todo o comportamento que você deseja.
fonte
--args
com o Chrome e não funciona. Ele funcionará apenas para a primeira instância . Se você tentar executar dois--user-data-dir
simultaneamente, não poderá fazê-lo,open
mas deverá executá-lo pelo/applications...
método antigo . Alguém sabe por que diabos--args
não funciona?Abra o Automator e crie um Aplicativo com uma única ação Executar Shell Script :
Esta aplicação irá iniciar o Firefox e sair instantaneamente, deixando apenas o Firefox em execução.
Como alternativa, crie um aplicativo usando o AppleScript Editor com o seguinte código AppleScript:
Ambos funcionam bem e não mantêm o Terminal ou um aplicativo de script em execução por mais de um segundo. Usando o Automator, você pode até criar um Serviço, se assim o desejar.
fonte
open --args
foi implementado na 10.6.2, como Bob já mencionou.open eclipse.app -n
abrir um segundo espaço de trabalho do Eclipse. Muito conveniente. Obrigado!Esta é uma discussão antiga, mas ainda aparece nas pesquisas do Google, então pensei em adicionar alguns ¢.
Provavelmente é melhor usar um "identificador de pacote configurável" em vez de caminho absoluto para o executável:
Ou em um script da Apple:
O que ainda não descobri é como abrir uma nova instância / janela com um perfil diferente assim que o primeiro já estiver aberto. (Se eu executar o AppleScript acima, outro com o "Perfil 2", o Chrome ainda abrirá outra janela como "Perfil 1"). :(
fonte
Não é necessário (como algumas outras respostas sugeriram) usar killall (ou similar) para matar o processo de aplicativo AppleScript pai ("applet") nesse cenário. Pode até ter efeitos colaterais indesejáveis se o nome / padrão atribuído ao killall corresponder mais do que apenas o processo do applet pai (por exemplo, outros aplicativos AppleScript em execução simultânea (se estiver usando "applet" como padrão)).
Algo como
kill $PPID
pode ser mais razoável, mas não podemos supor que o applet de um aplicativo AppleScript seja sempre o pai imediato do shell iniciado pelo script do shell . Felizmente, existe uma maneira perfeitamente razoável de fazer o que você precisa.De acordo com o TN2065 (em "Desejo iniciar um processo do servidor em segundo plano; como faço para que o shell script não espere até que o comando seja concluído?"), O método adequado é redirecionar stdout e stderr e fazer com que o shell execute o programa em segundo plano .
Use o Editor de scripts para salvar o seguinte programa como um aplicativo AppleScript:
(quebras de linha funcional adicionado para mantê-lo “estreita”; excluir o
¬
e\\
e colocar tudo em uma linha longa, se quiser)Ele será executado o tempo suficiente para iniciar o Firefox e sairá corretamente, enquanto o Firefox continuar sendo executado.
O redirecionamento é necessário porque o script shell não apenas espera que seu filho imediato (o shell) saia, mas também espera (todas as instâncias) as extremidades graváveis dos pipes criados para que o stdout e o stderr do shell sejam fechados . O stdout e o stderr do shell ( fazem os pipes do script de shell ) são herdados pelos programas executados sem redirecionamento (mesmo os executados em segundo plano
&
); o redirecionamento garante que o shell seja o último a conter as extremidades graváveis dos tubos. Portanto, o script do shell retornará imediatamente após a saída do shell, permitindo que o próprio aplicativo AppleScript saia (já que o script do shell é a última expressão no programa AppleScript).As outras respostas que usam open inside funcionam como shell script, porque open (na verdade, LaunchServices) faz o trabalho equivalente de colocar em segundo plano o programa resultante e enviar seu stdout e stderr para outro lugar.
fonte
open --args
parece mais limpo. existe alguma desvantagem em usar algum deles?open --args
provavelmente está bem.AppleScript
Dois pontos lá.
No entanto, funciona bem em 10.6.5
fonte
applet
refere-se a?A seguir, você deve especificar argumentos da linha de comando para o próprio .app:
Clique com o botão direito do mouse no pacote .app, selecione "Mostrar conteúdo do pacote", navegue até Info.plist, clique duas vezes nele, localize a chave Args, edite.
Eu não tenho uma máquina OS X à mão no momento, então não posso verificar se você também pode fazer isso com um alias (se você quiser manter o arquivo .app original sem argumentos etc.).
fonte
Enrole seu aplicativo dentro de um iniciador AppleScript.
Aqui estão os passos.
Crie um AppleScript com o seguinte conteúdo e salve-o como um aplicativo (neste exemplo, ele é chamado "Firefox 3 launcher.app").
Acesse esse aplicativo no Finder, clique com o botão direito do mouse e mostre o conteúdo da embalagem.
Coloque seu aplicativo na raiz do conteúdo do pacote. (Neste exemplo, seria "Firefox 3.app")
Resultado: / Aplicativos / Firefox 3 launcher.app/Firefox 3.app
Agora você pode abrir o iniciador de aplicativos.
Notas:
fonte
Por que você não usa:
Simples, mas funciona.
fonte
O
open
comando tem um--args
argumento opcional cujo valor será passado para o aplicativo aberto como argumentos. Por exemplo:fonte