OS X'te kabuk komut dosyasını çift tıklatarak nasıl çalıştırırım?


233

OS X'te kullanıcı yürütme iznine sahip bir kabuk komut dosyası var, ancak üzerine çift tıkladığımda bir metin düzenleyicisinde açılıyor. Çift tıklatarak nasıl çalıştırabilirim?

Yanıtlar:


266
  • Terminalde ilk olarak, komut dosyasını yazarak çalıştırılabilir yapın:

    chmod a+x (yourscriptname)
  • Ardından, Finder'da dosyanızı sağ tıklayın ve "Birlikte aç" ı ve ardından "Diğer ..." i seçin.

  • Burada dosyanın yürütülmesini istediğiniz uygulamayı seçersiniz, bu durumda Terminal olur. Terminali seçebilmek için "Önerilen Uygulamalar" dan "Tüm Uygulamalar" a geçmeniz gerekir. (Terminal.app uygulaması Yardımcı Programlar klasöründe bulunabilir)

  • Bu uzantıya sahip tüm dosyaları terminalde çalışacak şekilde ilişkilendirmek istemiyorsanız "Her Zaman Birlikte Aç" seçeneğini işaretlememeniz gerektiğini unutmayın.

  • Tamam'ı tıklattıktan sonra komut dosyanızı çift tıklatarak yürütebilirsiniz.

teşekkürler anladım, terminal ile ilişkilendirmek bilmiyordum, / bin / sh
c2h2

22
"Utilities" klasörüne bakmak zorunda olduğumu fark edene kadar listede Terminal.app bulamadım . Umarım bu biraz zaman kazanır.
Glenn Lawrence

27
OSX 10.8 ve üstü, isimleri ya sahip bir yürütülebilir komut dosyası üzerinde hiçbir eki veya sonek .commandolan varsayılan tarafından ihtiyaç duymadan Finder dan yürütülebilir, açmak için nasıl Finder talimat.
mklement0

1
"Tüm Uygulamalar" kaçırdığım ayardır ... muhtemelen Cheruvim'in de deneyimlediği şeydir. Glenn'in yorumuna gelince: pencerenin sağ üst köşesindeki yerleşik Arama özelliğini kullanabilirsiniz; uygulamanın tam adını yazdığınızdan emin olun, örn. Terminal.app.
büyük ihtiyar

3
Bunu yapmak için temiz bir yol değil. Komut .commanddosyanızı dosya uzantısına yeniden adlandırın .
Bachsau

227

.commandDosya adı uzantısını kullanmayı denediniz mi?


3
Bu daha iyi. @Lus cevabında çalışma klasörü aynı değil betiği açın.
Rodrigo

6
Konsol penceresi olmadan "arka plan" görevlerini başlatmanın bir yolu var mı?
Mart'ta lapo

6
Lütfen geçerli dizinin komut dosyanızın bulunduğu dizin olmayabilir. Doğru ayarlamak için bu soruya bir göz atın: stackoverflow.com/questions/59895/…
Pavel Alexeev

14
Yine de yürütme iznine ( chmod +x) sahip olmanız gerekiyor, ancak .commanduzantı Terminal'e zaten bağlı. Harika bir çözüm, teşekkür ederim
NorTicUs

Görünüşe göre kullanıcı bu yöntemle terminal programı ile etkileşime giremez - yanılmıyorsam?
Demis

153

OSX 10.10'dan (Yosemite) ve en azından OS X 10.8'den (Mountain Lion) beri , Finder'dan yürütülebilir komut dosyalarını açtığınızda (çift tıkladığınızda) davranış aşağıdaki gibidir :

  • Yürütülebilir komut [1] ile ya hiçbir eki ya da eki.command :
    • varsayılan olarak yürütülür - kurulum gerekmez :
      • Bir yeni terminal pencere komut çalıştığı açılır.
      • varsayılan olarak, komut dosyası sona erdikten sonra pencere açık kalır , böylece çıktıyı denetleyebilirsiniz (bu noktada komut dosyasını çalıştıran kabuk çıkmıştır ve artık onunla etkileşime giremezsiniz ).
        Bununla birlikte, Terminaller aracılığıyla komut dosyası çıktığında pencereyi Preferences... > Profilesotomatik olarak kapatmayı seçebilirsiniz .
    • Dikkat : çalışma klasörü , komut dosyasının bulunduğu klasör değil , her zaman geçerli kullanıcının ana klasörüdür .
      • Kabuk betiğinin bulunduğu klasörde değişiklik yapmak için
        • cd -- "$(dirname "$BASH_SOURCE")" Mesele hattından hemen sonra
        • veya POSIX uyumlu kalmanız gerekiyorsa cd -- "$(dirname "$0")",.
        • Uç örnekleri için, böyle bir bulgu olarak sembolik olarak komut dosyasının gerçek kaynak dizini, bkz bu cevabı benim.
    • Komut dosyası beklenmedik bir şekilde yürütülebilir değilse :
      • chmod +x <script>Terminal'de çalıştırarak çalıştırılabilir yapın ; aksi takdirde aşağıdaki belirtileri görürsünüz:
      • .command: Finder, sorunun düzeltilebileceğini öneren yanıltıcı bir hata iletisi görüntüler File > Get Info, bu doğru değildir - chmod +xyukarıda önerilen yöntemi kullanın .
      • sonek yok:
        • ile bir shebang hattı (örneğin #!/bin/bash): eki sanki davranıştır .sh- aşağıya bakın.
        • ile hiçbir shebang hattı: (varsayılan olarak TextEdit'i olan) varsayılan metin editörü açılır.
  • Yürütülebilir olsun veya olmasın sonek.sh içeren komut dosyaları :
    • içinde veya kurulduysa ile düzenleme için açılır .TextEdit.appXcode.app
  • Son ekli.scpt komut dosyaları veya .applescript(kendileri yürütülebilir olarak işaretlenmiş olsalar bile, normalde durum böyle değildir):
    • açılan düzenleme içinde[Apple]Script Editor
    • O Not JXA kaynak kod dosyaları görünmek hiçbir belirgin eki (henüz) sahip olmak.
  • İle komut dosyaları bir özel soneki (bir sonek henüz sisteme bilinmemektedir), çalıştırılabilir olsun olmasın (aslında, dosyanın her türlü için geçerlidir):
    • istemi size bunları açmak için uygulama için size zaman ilk onları açmak ve bu seçimi hatırlamak .

[1] Yürütülebilirlik şu anlama gelir: yürütülebilir izin bit (ler) i ayarlanmış bir komut dosyası ve çağıran kullanıcı - dosyanın sahipliğine göre - bu nedenle potansiyel olarak yürütmesine izin verilir. Tüm izin bitlerini (tipik olanı) ayarlamak için
kullanırsanız , herkes onu çağırabilir ( okuma izni bit (ler) ine ve dosyanın sahipliğine göre dosyayı okumalarına izin verildiğini varsayarak ).chmod a+x


1
Komut dosyası , profil ile el ile karıştırmak yerine dosyaya osascriptekleyebileceğiniz basit bir pencereyle çıktığında açılan Terminal penceresini kapatmak mümkündür .command.
l'L'l

@ I'L'I: Yani osascript -e '...'senaryonun sonuna komut eklemek mi istiyorsun ? Özel komut nedir ve komut dosyası en öndeki sekmede çalışmıyor olsa bile sağ sekmenin kapatılmasını sağlar mı?
mklement0

5
@ mklement0: Evet, birkaç dakikadan fazla test etmedim, ancak temel fikir .command komut dosyasının son satırına dahil etmektir : osascript -e 'tell application "Terminal" to close front window' > /dev/null 2>&1 &... her senaryoda çalışmayabilir, ancak son gerçekten anahtardır - osascript başka türlü kolayca adapte edilebilir (örn. terminal varsayılan davranışınız ise pencerenin sekmeye değiştirilmesi gerekebilir ).
l'L'l

.commandProfil ayarına rağmen komut dosyası çalıştırıldıktan sonra Terminal penceresinin / sekmesinin kapatılmasına izin verilmiyor mu?
CyberMew

@CyberMew: Komut dosyasını değiştirebiliyorsanız, sonunda bir tuş vuruşu için bekleyen bir komut ekleyin; örneğin, bir bashkomut dosyasıysa, read -p 'Press Return to close this window.'son ifade olarak ekleyin .
mklement0

38

Alternatif olarak, Platypus kullanarak betiğinizden düzenli bir Mac OS X uygulaması oluşturabilirsiniz


Bu gerçekten harika bir uygulama. Ama burada bir sorunum var. Bir .app dosyasına dönüştürmek istediğim bir python komut dosyası var. Komut dosyası, kullanıcının bazı girdi (raw_input ()) yazması gereken bir satır içeriyor, .app bu kod satırına ulaştığında, bir EOF (dosya sonu) hatası atıyor. Bu konuda ne yapabilirim?

1
Etkileşimli bir terminal değil. Platypus sadece senaryo çıktısı sunar. İki yönlü iletişim yok.
svth

4
Veya Kabuk Betiğini Çalıştır eylemini kullanarak Automator ile bir OS X uygulaması oluşturun.
Rangi Keen

15

Kolay yol, uzantıyı uzantı olarak değiştirmektir .command.

Ama bu Terminali açacak ve kapatmanız gerekecek. Herhangi bir çıktı görmek istemiyorsanız, çift tıklayıp dock'a ekleyebileceğiniz bir Mac Uygulaması oluşturmak için Automator'u kullanabilirsiniz.

  1. Açık Automatoruygulama
  2. "Uygulama" türünü seçin
  3. Eylemler arama kutusuna "run" yazın
  4. "Kabuk Betiğini Çalıştır" ı çift tıklayın
  5. RunTest etmek için sağ üst köşedeki düğmeyi tıklayın .
  6. File > Save Uygulama oluşturmak için.

resim açıklamasını buraya girin


Harika ! Bu iş akışını her gün 13: 00'da çalıştırmak için nasıl otomatikleştirebiliriz?
iAkshay

9

Platypus gibi üçüncü taraf uygulamaları kullanmaya gerek yoktur.

Komut Dosyası Düzenleyicisi ile bir Apple Komut Dosyası oluşturun ve do shell script "shell commands"doğrudan komut çağrıları veya yürütülebilir kabuk komut dosyaları için komutu kullanın , düzenlenebilir komut dosyasını bir yerde güvende tutun ve ardından bir Uygulama komut dosyası oluşturmak için dışa aktarın. uygulama betiği çift tıklatılarak veya çubuk klasöründeki seçimle başlatılabilir.


3
Daha da iyisi, Automator'ı kullanın ve Apple Script'ten geçmek yerine Kabuk Betiğini Çalıştır eylemini doğrudan kullanın.
Rangi Keen


0

chmod 774 filename

Not : bash komut dosyasına sahip 'filename' adlı dosyanın uzantısı yok

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.