Como faço para que este arquivo.sh seja executável através de um clique duplo?

165

Primeiro, estou usando o Mac.

Em seguida, eu preciso executar esse "arquivo.sh" que chamaremos. Sempre que preciso executá-lo, tenho que abrir o Terminal e digite:

cd /Users/Jacob/Documents/folderWithFileInIt
bash file.sh

Está tudo bem, mas acho que seria muito mais rápido se eu executasse o arquivo com um clique duplo, não acha?

Então, minha pergunta é: como faço para que este arquivo seja executável via clique duplo?

Minhas idéias eram:

a) digite algo como chmod no terminal e altere as permissões?

b) crie um arquivo, coloque o código que escrevi acima nele ^ e depois torne esse arquivo executável?

c) fazer uma automação de alguma forma para fazer isso?

Qual o melhor caminho ou existe um caminho ainda melhor? Também, por favor, explique o máximo que puder, sou novo no Terminal. Obrigado.

Jacob
fonte
1
Se você deseja um script agradável e fácil de clicar, sim, o Automator é a ferramenta certa. Você parece saber disso com a sua pergunta, então qual é a sua pergunta?
Rob Napier
mesma pergunta, mas eu tenho dmg jdk, alguma pasta app para criar ícones, alguns Jar ..mas estou falhou ao run / criar via automator ou .command
SANTOSH

Respostas:

349

Por padrão, os *.sharquivos são abertos em um editor de texto (Xcode ou TextEdit). Para criar um script de shell que será executado no Terminal quando você o abrir, nomeie-o com a extensão "command", por exemplo file.command,. Por padrão, eles são enviados ao Terminal, que executará o arquivo como um script de shell.

Você também precisará garantir que o arquivo seja executável, por exemplo:

chmod +x file.command

Sem isso, o Terminal se recusará a executá-lo.

Observe que o script não precisa começar com um #!prefixo nesse cenário específico, porque o Terminal organiza especificamente a execução com seu shell padrão. (Obviamente, você pode adicionar uma #!linha se quiser personalizar qual shell é usado ou se deseja garantir que possa executá-lo na linha de comando enquanto estiver usando um shell diferente.)

Observe também que o Terminal executa o shell script sem alterar o diretório de trabalho. Você precisará iniciar seu script com um cdcomando se realmente precisar que ele seja executado com um diretório de trabalho específico.

Chris Page
fonte
1
Obrigado pela resposta mais útil.
Jacob
46
Além disso, você pode usar cd "`dirname "$0"`"para definir o diretório de trabalho atual como o diretório onde está o seu skript do shell.
gearsdigital
3
Por razões estéticas, você também deve clicar com o botão direito do mouse no arquivo .command e abrir as informações. Lá você tem a opção de ocultar o sufixo (em nome e sufixo).
Bijan
Eu uso esse método para executar aplicativos via open -n ...comando. Funciona, mas sempre que a janela do Terminal é aberta e mostra "[Processo concluído]". É possível impedir a aparência da janela do Terminal de alguma forma?
Nik
1
@ Nik Não adianta executá-lo no Terminal se você não quiser que ele apareça em uma janela do terminal. Em vez disso, torne-o um pacote de aplicativos cujo executável é um script shebang. Ou faça um applet AppleScript ou Automator que execute o script. Você também pode usar as Preferências do Terminal para alterar o perfil para fechar a janela quando o processo terminar, mas essa não é a melhor solução se você quiser apenas executar um script de shell sem a interação do usuário.
Chris Página
31

Remova a extensão completamente e clique duas vezes nela. A maioria dos scripts de shell do sistema é assim. Contanto que tenha um shebang , funcionará.

NobleUplift
fonte
1
BTW, "shebang" é principalmente esta linha na frente de qualquer linha: #! / Bin / sh, mas pode ser diferente, leia o link fornecido para outros casos.
Lukas Liesis
Essa abordagem não precisa executar o chmod?
Atul
11

Você pode simplesmente dizer ao Finder para abrir o .sharquivo no Terminal:

  1. Selecione o arquivo
  2. Obter informações (cmd-i) nele
  3. Na seção "Abrir com", escolha "Outros ..." no menu pop-up
  4. Escolha Terminal como o aplicativo

Isso terá exatamente o mesmo efeito que renomeá-lo, .commandexceto ... você não precisa renomeá-lo :)

Markus Amalthea Magnuson
fonte
8
  1. Terminal de Lançamento
  2. Digite -> nano fileName
  3. Cole o conteúdo do arquivo em lotes e salve-o
  4. Digite -> chmod + x fileName
  5. Ele criará um arquivo exe agora você pode clicar duas vezes nele.

O nome do arquivo deve estar entre aspas duplas. Desde que eu estou usando Mac-> No meu caso, o conteúdo do arquivo em lotes é

cd / Usuários / seuNome / Documentos / SeleniumServer

hub java -jar selenium-server-standalone-3.3.1.jar -role

Isso vai funcionar com certeza

Manish
fonte
0

você pode alterar o arquivo executável usando o chmodseguinte

chmod 755 file.sh

e use este comando para executar

./file.sh
Night Coder
fonte
Bem-vindo ao SO! Sua resposta não adiciona nada à resposta já aceita. Por favor, explique por que isso é diferente das outras respostas que já existem.
GabrielOshiro 14/07