Come posso rendere eseguibile questo file.sh con un doppio clic?


165

Prima di tutto sto usando il Mac.

Successivamente, devo eseguire questo "file.sh", lo chiameremo. Ogni volta che devo eseguirlo devo aprire Terminale e digitare:

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

Va bene, ma penso che sarebbe molto più veloce se eseguissi il file con un doppio clic, non credi?

Quindi la mia domanda è: come posso rendere questo file eseguibile con un doppio clic?

Le mie idee erano:

a) digitare qualcosa come chmod nel terminale e cambiare i permessi?

b) creare un file, inserire il codice che ho scritto sopra in esso ^ e quindi rendere quel file eseguibile?

c) fare in qualche modo un'automazione per farlo?

Qual è il modo migliore o esiste un modo ancora migliore? Inoltre, ti prego di spiegare il più possibile, sono nuovo di Terminal. Grazie.


1
Se vuoi uno script piacevole e facile da cliccare, allora sì, Automator è lo strumento giusto. Sembra che tu lo sappia dalla tua domanda, quindi qual è la tua domanda?
Rob Napier,

stessa domanda ma ho jdk dmg, alcune cartelle di app per la creazione di icone, alcuni Jar .. ma non riesco a eseguire / creare tramite automator o .command
SANTOSH

Risposte:


349

Per impostazione predefinita, i *.shfile vengono aperti in un editor di testo (Xcode o TextEdit). Per creare uno script shell che verrà eseguito in Terminale quando lo apri, chiamalo con l'estensione "command", ad es.file.command . Per impostazione predefinita, questi vengono inviati al Terminale, che eseguirà il file come uno script di shell.

Sarà inoltre necessario assicurarsi che il file sia eseguibile, ad esempio:

chmod +x file.command

Senza questo, Terminal rifiuterà di eseguirlo.

Si noti che lo script non deve iniziare con un #!prefisso in questo scenario specifico, poiché Terminal organizza in modo specifico per eseguirlo con la shell predefinita. (Naturalmente, puoi aggiungere un#! riga se vuoi personalizzare quale shell viene usata o se vuoi assicurarti di poterla eseguire dalla riga di comando mentre usi una shell diversa.)

Si noti inoltre che Terminal esegue lo script della shell senza modificare la directory di lavoro. Dovrai iniziare lo script con un cdcomando se in realtà ne hai bisogno per eseguirlo con una directory di lavoro specifica.


1
Grazie per la risposta più utile.
Jacob

46
Inoltre è possibile utilizzare cd "`dirname "$0"`"per impostare la directory di lavoro corrente sulla directory in cui si trova lo script della shell.
gearsdigital,

3
Per motivi estetici, dovresti anche fare clic con il tasto destro sul file .command e aprire le informazioni. Lì hai la possibilità di nascondere il suffisso (sotto nome e suffisso).
Bijan,

Uso questo metodo per eseguire app tramite open -n ...comando. Funziona, ma ogni volta che si apre la finestra Terminale e mi mostra "[Processo completato]". È possibile in qualche modo prevenire l'aspetto della finestra del Terminale?
Nik,

1
@Nik Non ha senso eseguirlo nel Terminale se non vuoi che venga mostrato in una finestra del Terminale. Invece, rendilo un pacchetto di applicazioni il cui eseguibile è uno script shebang. Oppure crea un'applet AppleScript o Automator che esegue lo script. È inoltre possibile utilizzare Preferenze terminale per modificare il profilo per chiudere la finestra al termine del processo, ma questa non è la soluzione migliore se si desidera semplicemente eseguire uno script di shell senza l'interazione dell'utente.
Chris Page

31

Rimuovere completamente l'estensione e quindi fare doppio clic su di essa. La maggior parte degli script della shell di sistema sono così. Finché ha un shebang funzionerà.


1
A proposito, "shebang" è principalmente questa linea di fronte a qualsiasi riga: #! / Bin / sh ma può essere diversa, leggi il link fornito per altri casi.
Lukas Liesis,

Questo approccio non ha bisogno di fare chmod?
Atul,

11

Puoi semplicemente dire a Finder di aprire il .shfile nel Terminale:

  1. Seleziona il file
  2. Ottieni informazioni (cmd-i) su di esso
  3. Nella sezione "Apri con", seleziona "Altro ..." nel menu a comparsa
  4. Scegli Terminale come applicazione

Ciò avrà lo stesso effetto del rinominarlo .commandtranne ... non è necessario rinominarlo :)


8
  1. Launch Terminal
  2. Digitare -> nano fileName
  3. Incolla il contenuto del file batch e salvalo
  4. Digita -> chmod + x fileName
  5. Creerà il file exe ora è possibile fare doppio clic e esso.

Il nome del file deve essere tra virgolette doppie. Dal momento che sto usando Mac-> Nel mio caso il contenuto del file batch è

cd / Users / yourName / Documents / SeleniumServer

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

Funzionerà di sicuro


0

puoi modificare il file eseguibile usando in chmodquesto modo

chmod 755 file.sh

e usa questo comando per eseguire

./file.sh

Benvenuti in SO! La tua risposta non aggiunge nulla alla risposta già accettata. Spiega perché è diverso dalle altre risposte già esistenti.
GabrielOshiro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.