Executando scripts de shell no OS X Dock?


160

Como configuro um script de shell para executar a partir do dock do Mac OSX? Parece que simplesmente criar um atalho abrirá o arquivo no meu editor. Existe um sinalizador que eu preciso definir em algum lugar para dizer para executar, em vez de abri-lo para edição?


2
deve marcar com +1 apenas para o avatar, embora eu também goste do tópico.
— precisa saber é o seguinte

Você pode considerar mudar as respostas aceitas para o segundo @Wilco. Eu acho que é uma resposta melhor.
— Gray

Respostas:


190

Você pode criar um fluxo de trabalho do Automator com uma única etapa - "Executar script do shell"

Em seguida File > Save As, altere o formato do arquivo para "aplicativo". Quando você abre o aplicativo, ele executa a etapa Shell Script, executando o comando, saindo após a conclusão.

O benefício disso é que é realmente simples de fazer, e você pode facilmente obter a entrada do usuário (por exemplo, selecionando um monte de arquivos) e depois passá-la para a entrada do script do shell (para stdin ou como argumentos).

(O Automator está na sua /Applicationspasta!)

Exemplo de fluxo de trabalho


6
@dbr, empurrador de botão da GUI! :) Brincadeirinha, é uma boa sugestão!
— willasaywhat

Sim, foi uma excelente sugestão :) Eu mesmo escrito ações do Automator para alguns dos meus aplicativos e ainda esquecê-la em momentos como este :)
— Jason Coco

Não consigo fazer isso funcionar com nohup, como "nohup / usr / bin / myscript &; disown -a && exit 0". Eu preciso do aplicativo / fluxo de trabalho para executar um script e sair imediatamente. Alguma ideia? :-)
— hourback

3
@martineau Se você abrir o aplicativo, open -a SomeAppThing.app --args --etc=2ele deve se concentrar. Como alternativa, você pode focalizá-lo usando o Applescript (por exemplo osascript -e 'tell application "Google Chrome" to activate')
— dbr 8/14

1
Nota: se o seu script estiver iniciando um aplicativo GUI que permanecerá aberto por um tempo, isso mostrará um ícone de engrenagem girando constantemente na barra de tarefas até que o aplicativo seja fechado. Uma solução alternativa é adicionar `&> / dev / null &` à linha de inicialização do script para que o Automator não espere.
— eWall

50

Se você não precisar de uma janela do Terminal, poderá transformar qualquer arquivo executável em um Aplicativo apenas criando um shell script Examplee movendo-o para o nome do arquivo Example.app/Contents/MacOS/Example. Você pode colocar esse novo aplicativo no seu dock como qualquer outro e executá-lo com um clique.

NOTA: o nome do aplicativo deve corresponder exatamente ao nome do script. Portanto, o diretório de nível superior deve ser Example.appe o script no Contents/MacOSsubdiretório deve ser nomeado Examplee o script deve ser executável.

Se você precisa exibir a janela do terminal, não tenho uma solução simples. Você provavelmente poderia fazer algo com o Applescript, mas isso não é muito limpo.


1
Você não sabe se existe uma maneira fácil de passar arquivos como argumentos para o shell script? Para arquivos abertos usando "abrir com ...".
— Fuzzy76

9
Para quem tenta fazer isso - o nome do aplicativo deve corresponder exatamente ao nome do script. Então realmente tem que ser example.sh.app, não apenas example.app. Você receberá um aviso sobre aplicativo danificado se estes não corresponderem
— Kip

1
Para esclarecer - eu sou um noob OSX - você quer dizer apenas criar uma estrutura de pastas como a mostrada no seu exemplo, com o arquivo de script colocado nela, como mostrado?
— 27614 martineau

2
@martineau Sim, está correto. Se você criar uma pasta cujo nome termine .appnessa estrutura, ela será tratada como um Aplicativo executável. Se você quiser ver o conteúdo dessa pasta no Finder, clique com o botão direito do mouse nela e selecione "exibir o conteúdo do pacote" (porque clicar duas vezes nela executaria o aplicativo). No terminal, parecerá apenas uma pasta. (Eu não tenho certeza se do Finder permite-lhe mudar o nome da pasta para .app, por si só, você pode precisar de fazer a renomeação no Terminal.)
— Jeremy Banks

1
Eu apenas tentei isso e recebi um erro no El Capitan (10.11) de: "Você não pode abrir .... porque os aplicativos powerpc não são mais suportados." : D Isso é bem interessante!
— AllenH

26

No OSX Mavericks:

  1. Crie seu script de shell.
  2. Torne seu script de shell executável:

    chmod +x your-shell-script.sh
  3. Renomeie seu script para ter um .appsufixo:

    mv your-shell-script.sh your-shell-script.app
  4. Arraste o script para a estação OSX.
  5. Renomeie seu script de volta para um .shsufixo:

    mv your-shell-script.app your-shell-script.sh
  6. Clique com o botão direito do mouse no arquivo no Finder e clique na opção "Obter informações".
  7. Na parte inferior da janela, defina o script de shell para abrir com o terminal.

Agora, quando você clica no script no dock, uma janela do terminal será exibida e o executará.

Bônus: para que o terminal feche quando o script for concluído, adicione exit 0no final e altere as configurações do terminal para "fechar o shell se for encerrado corretamente", como diz nesta resposta do SO .


Bom, isso funcionou para mim, de qualquer maneira para arriscar o ícone que me pergunto. FYI: Também passo 7 está se referindo ao arquivo e não o item de menu ...
— Mike Q

do jeito legal! apenas todos .sh com terminal aberto.
— IHTCboy # 15/17

@ stiemannkj1, isso mostra o ícone enquanto o aplicativo está sendo executado? Existe alguma maneira de escondê-lo?
— Pacerier 15/12

@ Pacerier, desculpe, não estou mais no OSX (mudei para o Linux :)). Você pode tentar a resposta do Jeremy Bank . Eu não tenho quaisquer outras idéias e desde que eu não tenho OSX, eu não posso teste ou mexer com qualquer coisa para tentar mostrar / ocultar o ícone ..
— stiemannkj1

17

Eu sei que isso é antigo, mas no caso de ser útil para outras pessoas:

Se você precisar executar um script e desejar que o terminal apareça, poderá ver os resultados que pode fazer como Abyss Knight disse e alterar a extensão para .command. Se você clicar duas vezes nele, abrirá uma janela do terminal e será executada.

No entanto, eu precisava disso para executar a partir do automator ou appleScript. Portanto, para abrir um novo terminal, o comando que eu executei em "executar script de shell" foi "abrir myShellScript.command" e foi aberto em um novo terminal.


maravilhoso, obrigado! Agora, todos precisam fazer da solução perfeita uma maneira de fechar a janela do terminal quando o script for concluído.
— Peter M

1
bem, se você tiver selecionado fechar a janela na saída nas preferências do terminal, poderá adicionar o comando exit ao seu script e terá o que deseja.
— Jason Tholstrup

7

Contanto que seu script seja executável e não tenha nenhuma extensão, você pode arrastá-lo para o lado direito (lado do documento) do Dock e ele será executado em uma janela de terminal quando clicado em vez de abrir um editor.

Se você deseja ter uma extensão (como foo.sh), pode ir para a janela de informações do arquivo no Finder e alterar o aplicativo padrão para esse script específico, independentemente do que seja (TextEdit, TextMate, qualquer padrão definido no seu computador para arquivos .sh) para o Terminal. Ele será executado apenas em vez de abrir em um editor de texto. Novamente, você precisará arrastá-lo para o lado direito do Dock.


1
NOTA : Isso funciona como um campeão no OS X 10.10 Yosemite. Não posso comentar sobre 10.9 #
— Bryan Ash

1
Funciona em 10.11. Obrigado!
— Yassine Imounachen

Funciona em 10.12 também! Talvez meu comentário sobre 10.9 esteja incorreto, mas notei que você precisa arrastá-lo para a parte do encaixe abaixo do separador. Infelizmente, não tenho como testar novamente o 10.9.
— precisa saber é o seguinte

Não é necessário adicioná-lo ao Dock. Pode ser executado a partir da área de trabalho. Mas não pode haver extensão. Torne-o executável e você pode apenas clicar duas vezes. Esta é a opção mais simples que eu já vi.
— Rich Apodaca

5

Acho que esse tópico pode ser útil: http://forums.macosxhints.com/archive/index.php/t-70973.html

Parafraseando, você pode renomeá-lo com a extensão .command ou criar um AppleScript para executar o shell.


No Snow Leopard, pelo menos, adicionar uma extensão .command a um script faz com que seja executado no terminal se você clicar duas vezes nele, mas por algum motivo você ainda não pode arrastá-lo para o dock. As sugestões de dbr e Jeremy funcionaram para mim, no entanto.
— quer

5

Como Joe mencionou, a criação do shell script e, em seguida, a criação de um script applecript para chamar o shell script, fará isso e é bastante útil.

Shell Script

  1. Crie seu script de shell no seu editor de texto favorito, por exemplo:

    mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"

    (isso executa o executável w32, usando a estrutura mono)

  2. Salvar script de shell, para o meu exemplo "StartKeepass.sh"

Apple Script

  1. Abra o AppleScript Editor e chame o shell script

    do shell script "sh /Volumes/Media/~Users/me/Software/StartKeepass.sh" user name "<enter username here>" password "<Enter password here>" with administrator privileges

    • do shell script - Comando AppleScriptcript para chamar comandos externos do shell
    • "sh ...." - este é seu script de shell (caminho completo) criado na etapa um (você também pode executar comandos diretos, eu poderia omitir o script de shell e apenas executar meu comando mono aqui)
    • user name - declara para AppleScript que você deseja executar o comando como um usuário específico
    • "<enter username here> - substitua pelo seu nome de usuário (mantendo aspas) ex "josh"
    • password - declara para AppleScript sua senha
    • "<enter password here>" - substitua por sua senha (mantendo aspas) ex "mypass"
    • with administrative privileges - declara que deseja executar como administrador

Crie seu .APP

  1. salve seu AppleScript como filename.scpt, no meu caso RunKeepass.scpt

  2. salve como ... seu AppleScript e altere o formato do arquivo para o aplicativo, resultando em RunKeepass.app no ​​meu caso

  3. Copie seu arquivo de aplicativo para a pasta de aplicativos


5

No Editor de scripts:

do shell script "/full/path/to/your/script -with 'all desired args'"

Salve como um pacote de aplicativos.

Contanto que tudo que você deseja fazer seja obter o efeito do script, isso funcionará bem. Você não verá STDOUT ou STDERR.


2
Eu sugeriria: "Salvar como um aplicativo PACOTE". Os pacotes são lançados muito mais rápido que os aplicativos.
— e.James

-3

Alguém escreveu ...

Acabei de definir todos os arquivos que terminam em ".sh" para abrir com o Terminal. Funciona bem e você não precisa alterar o nome de cada script de shell que deseja executar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.