Jak sprawić, by ten plik.sh był wykonywalny poprzez dwukrotne kliknięcie?

165

Po pierwsze, używam Maca.

Następnie muszę wykonać ten plik "file.sh", który nazwiemy. Za każdym razem, gdy muszę go wykonać, muszę otworzyć Terminal i wpisać:

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

To jest w porządku, ale wydaje mi się, że byłoby o wiele szybciej, gdybym wykonał plik po dwukrotnym kliknięciu, nie sądzisz?

Moje pytanie brzmi, jak sprawić, by ten plik był wykonywalny poprzez dwukrotne kliknięcie?

Moje pomysły były albo:

a) wpisać coś takiego jak chmod w terminalu i zmienić uprawnienia?

b) zrobić plik, umieścić w nim kod, który napisałem powyżej ^ i uczynić ten plik wykonywalnym?

c) jakoś zrobić automatyzację, aby to zrobić?

Który sposób jest najlepszy, czy jest jeszcze lepszy sposób? Proszę również wyjaśnić jak najwięcej, jestem nowy w Terminalu. Dzięki.

Jakub
źródło
1
Jeśli chcesz mieć ładny, łatwy do kliknięcia skrypt, to tak, Automator jest właściwym narzędziem. Wydaje się, że wiesz o tym ze swojego pytania, więc jakie jest twoje pytanie?
Rob Napier,
to samo pytanie, ale mam jdk dmg, jakiś folder aplikacji do tworzenia ikon, trochę Jar ... ale nie udało mi się uruchomić / utworzyć za pomocą automatu lub .command
SANTOSH

Odpowiedzi:

350

Domyślnie *.shpliki są otwierane w edytorze tekstu (Xcode lub TextEdit). Aby utworzyć skrypt powłoki, który będzie wykonywany w Terminalu po otwarciu, nadaj mu nazwę rozszerzeniem „polecenie”, np file.command.. Domyślnie są one wysyłane do terminala, który wykona plik jako skrypt powłoki.

Musisz także upewnić się, że plik jest wykonywalny, np .:

chmod +x file.command

Bez tego Terminal odmówi wykonania tego.

Zauważ, że skrypt nie musi zaczynać się od #!prefiksu w tym konkretnym scenariuszu, ponieważ Terminal specjalnie organizuje wykonanie go z domyślną powłoką. (Oczywiście możesz dodać #!linię, jeśli chcesz dostosować używaną powłokę lub jeśli chcesz mieć pewność, że możesz ją wykonać z wiersza poleceń, używając innej powłoki).

Zwróć również uwagę, że Terminal wykonuje skrypt powłoki bez zmiany katalogu roboczego. Będziesz musiał rozpocząć skrypt od cdpolecenia, jeśli faktycznie potrzebujesz go do uruchomienia z określonym katalogiem roboczym.

Chris Page
źródło
1
Dzięki za bardziej pomocną odpowiedź.
Jacob
46
Możesz także użyć, cd "`dirname "$0"`"aby ustawić bieżący katalog roboczy na katalog, w którym znajduje się twój skrypt powłoki.
gearsdigital
3
Ze względów estetycznych należy również kliknąć prawym przyciskiem myszy plik .command i otworzyć informacje. Tam możesz ukryć sufiks (pod nazwą i sufiksem).
Bijan,
Używam tej metody do uruchamiania aplikacji za pomocą open -n ...polecenia. Działa, ale za każdym razem otwiera się okno terminala i pokazuje mi komunikat „[Proces zakończony]”. Czy można w jakiś sposób zapobiec pojawianiu się okna terminala?
Nik
1
@Nik Nie ma sensu uruchamiać go w Terminalu, jeśli nie chcesz, aby pojawiał się w oknie terminala. Zamiast tego utwórz pakiet aplikacji, którego plik wykonywalny jest skryptem shebang. Lub utwórz aplet AppleScript lub Automator, który uruchamia skrypt. Możesz także użyć Preferencji terminala, aby zmienić profil, aby zamknąć okno po zakończeniu procesu, ale nie jest to najlepsze rozwiązanie, jeśli chcesz po prostu uruchomić skrypt powłoki bez interakcji z użytkownikiem.
Chris Page
31

Całkowicie usuń rozszerzenie, a następnie kliknij je dwukrotnie. Większość skryptów powłoki systemu wygląda tak. Dopóki ma shebang , będzie działać.

NobleUplift
źródło
1
BTW, "shebang" przeważnie to ten wiersz przed jakimikolwiek wierszami: #! / Bin / sh, ale może być inny, przeczytaj podany link w innych przypadkach.
Lukas Liesis
Czy to podejście nie wymaga chmod?
Atul
11

Możesz po prostu powiedzieć Finderowi, aby otworzył .shplik w Terminalu:

  1. Wybierz plik
  2. Uzyskaj informacje (cmd-i) na ten temat
  3. W sekcji „Otwórz za pomocą” wybierz z menu podręcznego opcję „Inne…”
  4. Wybierz Terminal jako aplikację

Będzie to miało dokładnie taki sam efekt, jak zmiana nazwy na, .commandale… nie musisz zmieniać jej nazwy :)

Markus Amalthea Magnuson
źródło
8
  1. Uruchom Terminal
  2. Wpisz -> nano nazwa pliku
  3. Wklej zawartość pliku wsadowego i zapisz go
  4. Wpisz -> chmod + x nazwa_pliku
  5. Utworzy plik exe teraz możesz kliknąć dwukrotnie i to.

Nazwa pliku powinna być umieszczona w cudzysłowie. Ponieważ używam Mac-> W moim przypadku zawartość pliku wsadowego to

cd / Users / yourName / Documents / SeleniumServer

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

Na pewno zadziała

Manish
źródło
0

możesz zmienić plik wykonywalny, używając w chmodten sposób

chmod 755 file.sh

i użyj tego polecenia do wykonania

./file.sh
Night Coder
źródło
Witamy w SO! Twoja odpowiedź nie dodaje nic do już zaakceptowanej odpowiedzi. Proszę wyjaśnić, dlaczego różni się to od innych odpowiedzi, które już istnieją.
GabrielOshiro