OSX 'aberto com' script bash

8

Eu tenho um script bash, potencialmente muitos deles de fato, com o qual gostaria de poder abrir arquivos no localizador do OSX.

É um conceito muito, muito simples, mas, por algum motivo, os scripts do bash são acinzentados na caixa de diálogo 'abrir com' do localizador.

Entendo que existem várias maneiras de usar o AppleScript ou o empacotamento como um aplicativo ... mas não consegui entender nada disso e não quero ter que escolher outro idioma apenas para esta tarefa trivial - alguém poderia me alimentar como fazer isso?

Obrigado!

rico
fonte

Respostas:

11

Não é possível. O Launch Services trabalha com identificadores de aplicativos e os scripts do bash não os possuem.

Você precisa criar um aplicativo wrapper usando o Automator.

  1. Launch Automator
  2. Selecionar Aplicativo
  3. Procure a ação Executar Script do Shell e adicione-a à direita.
  4. Passar entrada como argumentos
  5. Coloque seu script lá
  6. Salvar em algum lugar

Aqui está minha versão, usando o utilitário de linha de comando Growl :

insira a descrição da imagem aqui

Resultado:

insira a descrição da imagem aqui


Você pode ver o efeito dessa alteração ~/Library/Preferences/com.apple.LaunchServices.plistao alterar tudo :

insira a descrição da imagem aqui

("Teste" é o nome que dei ao meu aplicativo Automator)

Daniel Beck
fonte
Obrigado. Dei uma guinada, mas tento abrir com o aplicativo criado pelo Automator, mas diz: A ação "Executar script de shell" encontrou um erro. Verifique as propriedades da ação e tente executar o fluxo de trabalho novamente. Qual é a mensagem de erro menos útil que eu já vi há algum tempo!
rich
@ Rich Funciona com o script padrão na ação de script de shell de execução? Ou nem então? Você se lembrou de alterar a preferência de entrada do passe ? Você tenta clicar duas vezes no seu aplicativo, arrastar arquivos para o seu aplicativo ou abrir apenas o arquivo associado? O que acontece se você começar de outras maneiras?
Daniel Beck
Obrigado. Não tenho certeza de como você veria a saída do padrão, uma vez que apenas chama gato, mas parece que isso não ocorreu. Em vez de o aplicativo chamar meu script de um local fora do padrão, criei um script em / usr / local / bin e descobri que, se eu tentasse executá-lo, reclamava que havia muitos níveis de links simbólicos (1 ?! ) Então, apenas copiei o script lá e agora parece funcionar. Obrigado!
rich
1

Segui as instruções de Daniel Beck com algumas modificações e consegui que isso funcionasse em arquivos de URL que eu queria abrir no Chrome (o Firefox também funcionaria) em um Mac.

O script que eu usei é:

sed 's/^URL=/URL=/' "$1" | grep -m 1 '^URL=' | sed 's/^URL=//' | tr -d '\r' | xargs open -a "Google Chrome"

Isso analisa a URL = linha de um arquivo de URL típico que se parece com:

[InternetShortcut]
URL=http://www.docircuits.com/pricing
IDList=
HotKey=0
IconFile=O:\Apps\Firefox\Data\profile\shortcutCache\4t0JW4mY1qRPhiYz1fY3dw==.ico
IconIndex=0

Salve o script do Automator em algum lugar como o diretório ~ / Library. Liguei para o meu OpenUrl.app.

Agora vá para um arquivo de URL em algum lugar e abra o pop-up "Obter informações". Altere o comando Abrir com para o script OpenUrl.app. Teste com apenas um ou clique no botão "Alterar tudo ..." Na primeira vez em que cliquei, ocorreu um erro, mas parecia funcionar da segunda vez.

Ao desenvolver isso, obtive os erros "Run Shell Script", mas isso ocorreu devido a erros reais no script. Acho que o principal problema do script de Daniel é que ele não lida com espaços no nome do arquivo que você tenta abrir.

Keith Olson
fonte
-1

Use reattach-to-user-namespace, do repositório ou com brew install reattach-to-user-namespace. Isso funciona no Sierra, não tenho certeza sobre outros sistemas operacionais.

Uma vez instalado, use-o no script bash da seguinte forma:

reaplicar ao espaço de nome do usuário abrir a_cool_file.png

wickedchicken
fonte
Isso não parece responder à pergunta. O OP deseja usar a função "Abrir com" do Finder para abrir um arquivo com um script Bash. Fornecer suporte à área de transferência no Tmux e Screen não ajuda nisso, principalmente porque não há indicação de que o Tmux ou o Screen estejam envolvidos.
8bittree