OS X Dock'tan Kabuk Betikleri Yürütülüyor mu?


160

Mac OSX dock'undan yürütmek için bir kabuk komut dosyasını nasıl ayarlarım? Sadece bir kısayol oluşturmanın dosyayı düzenleyicimde açacağı anlaşılıyor. Düzenlemek için açmak yerine çalıştırmak için bir yere ayarlamam gereken bir bayrak var mı?


2
Ben de avatar için + 1 olmalıdır, ama ben de konuyu seviyorum.
Matt Bannert

2.Wilco'ya verilen cevapları kabul etmeyi düşünebilirsiniz. Bence bu daha iyi bir cevap.
Gri

Yanıtlar:


190

Tek adımda bir Automator iş akışı oluşturabilirsiniz - "Kabuk Betiğini Çalıştır"

Ardından File > Save As, Dosya Biçimini "Uygulama" olarak değiştirin. Uygulamayı açtığınızda, Komut Denetimi adımını çalıştırarak komutu yürüterek tamamlandıktan sonra çıkacaktır.

Bunun yararı yapmak gerçekten basittir ve kullanıcı girişini (örneğin, bir grup dosya seçerek) kolayca alabilir, ardından kabuk betiğinin girişine (stdin veya argümanlar olarak) aktarabilirsiniz.

(Automator /Applicationsklasörünüzde!)

Örnek iş akışı


6
@dbr, GUI düğme itici! :) Şaka yapıyorum, bu iyi bir öneri!
willasaywhat

Evet, mükemmel bir öneriydi :) Bazı uygulamalarım için Automator eylemleri bile yazdım ve hala böyle zamanlarda unutuyorum :)
Jason Coco

Nohup, la "nohup / usr / bin / myscript &; disown -a && exit 0" ile çalışmak için bunu elde edemiyorum. Bir komut dosyası çalıştırmak ve hemen çıkmak için app / iş akışına ihtiyacım var. Herhangi bir fikir? :-)
saat geri

3
@martineau Uygulamayı açarak açarsanız open -a SomeAppThing.app --args --etc=2odaklanmalısınız. Alternatif olarak Applescript (örn. osascript -e 'tell application "Google Chrome" to activate')
dbr

1
Not: Komut dosyanız bir süre açık kalacak bir GUI uygulaması başlatıyorsa, uygulama kapatılana kadar görev çubuğunda sürekli dönen bir dişli simgesi gösterilir. Bir çözüm, komut dosyasının başlangıç ​​satırına `` &> / dev / null '' eklemektir, böylece Automator beklemez.
ewall

50

Terminal penceresine ihtiyacınız yoksa, herhangi bir yürütülebilir dosyayı bir kabuk betiği oluşturarak Exampleve dosya adına taşıyarak bir Uygulama yapabilirsiniz Example.app/Contents/MacOS/Example. Bu yeni uygulamayı diğer tüm platformlar gibi dokunuza yerleştirebilir ve bir tıklama ile yürütebilirsiniz.

NOT: Uygulamanın adı kod adıyla tam olarak eşleşmelidir. Bu nedenle, üst düzey dizinin olması Example.appve Contents/MacOSalt dizindeki komut dosyasının adlandırılması Exampleve komut dosyasının yürütülebilir olması gerekir.

Terminal penceresinin görüntülenmesi gerekiyorsa, basit bir çözümüm yok. Muhtemelen Applescript ile bir şeyler yapabilirsiniz, ama bu çok temiz değil.


1
Dosyaların kabuk komut dosyasına argüman olarak aktarılmasının kolay bir yolu olup olmadığını bilmiyor musunuz? "Birlikte aç ..." kullanılarak açılan dosyalar için.
Fuzzy76

9
Bunu yapmaya çalışan herkes için - uygulamanın adı kod adıyla tam olarak eşleşmelidir. Bu yüzden gerçekten example.sh.appdeğil, sadece olmalı example.app. Bunlar uyuşmuyorsa hasarlı uygulama hakkında bir uyarı alacaksınız
Kip

1
Açıklığa kavuşturmak için - Ben bir OSX çaylakıyım - sadece örnekte gösterildiği gibi bir klasör yapısı oluşturduğunuz gibi komut dosyası ile mi oluşturuldunuz?
martineau

2
@martineau Evet, doğru. Adı biten .appve bu yapıya sahip bir klasör oluşturursanız , yürütülebilir bir uygulama olarak değerlendirilir. Finder'daki klasörün içeriğini incelemek istiyorsanız, üzerine sağ tıklamanız ve "paket içeriğini görüntüle" yi seçmeniz gerekir (çünkü üzerine çift tıklamak uygulamayı çalıştırır). Terminalde, sadece bir klasör gibi görünecektir. (Finder'ın klasörü kendi başına .app olarak yeniden adlandırmanıza izin verip vermeyeceğinden emin değilim; Terminal'de yeniden adlandırmanız gerekebilir.)
Jeremy Banks

1
Bunu denedim ve El Capitan'da (10.11) şu hatayı aldım: "Açamıyorsunuz .... çünkü powerpc uygulamaları artık desteklenmiyor." : D Bu oldukça ilginç!
AllenH

26

OSX Mavericks'te:

  1. Kabuk betiğinizi oluşturun.
  2. Kabuk betiğinizi çalıştırılabilir yapın:

    chmod +x your-shell-script.sh
  3. .appSoneki olması için komut dosyanızı yeniden adlandırın :

    mv your-shell-script.sh your-shell-script.app
  4. Komut dosyasını OSX dock'a sürükleyin.
  5. Komut dosyanızı bir .shsonek olarak yeniden adlandırın :

    mv your-shell-script.app your-shell-script.sh
  6. Finder'da dosyayı sağ tıklayın ve "Bilgi Al" seçeneğini tıklayın.
  7. Pencerenin altında, kabuk betiğini terminalle açılacak şekilde ayarlayın.

Artık bağlantı istasyonundaki komut dosyasını tıklattığınızda, bir terminal penceresi açılır ve komut dosyanızı yürütür.

Bonus: Komut dosyanız tamamlandığında terminalin kapanmasını exit 0sağlamak için sonuna ekleyin ve bu SO yanıtında olduğu gibi terminal ayarlarını "temiz bir şekilde çıkarsa kabuğu temizle kapat" olarak değiştirin .


Güzel, bu benim için çalıştı, merak ettiğim ikonu şansa sokmanın herhangi bir yolu. Bilginize: Ayrıca adım 7 menü öğesine değil dosyaya atıfta bulunuyor ...
Mike Q

güzel yol! sadece tüm .sh ile açık terminal.
iHTCboy

@ stiemannkj1, Bu uygulama çalışırken simgesini gösteriyor mu? Gizlemek için yine de var mı?
Pacerier

@Pacerier, üzgünüm, artık OSX'te değilim (Linux'a geçti :)). Jeremy Bank'ın cevabını denemek isteyebilirsiniz . Başka bir fikrim yok ve
OSX'im olmadığı için

17

Bu eski olduğunu biliyorum ama başkalarına yardımcı olması durumunda:

Bir komut dosyası çalıştırmanız ve terminalin açılmasını istiyorsanız, Abyss Knight'ın söylediği gibi yapabileceğiniz sonuçları görebilirsiniz ve uzantıyı .command olarak değiştirin. Üzerine çift tıklarsanız, bir terminal penceresi açılır ve çalışır.

Ancak bunu automator veya appleScript'ten çalıştırmak için gerekliydi. Bu nedenle, yeni bir terminal açmak için "run shell script" den çalıştırdığım komut "open myShellScript.command" idi ve yeni bir terminalde açıldı.


harika, teşekkürler! Şimdi tüm mükemmel bir çözüm yapmak istiyorum komut tamamlandığında terminal penceresini kapatmak için bir yol olacaktır.
Peter M

1
terminal tercihlerinde çıkışta seçili pencereyi kapatırsanız, komutunuza çıkış komutunu ekleyebilirsiniz ve istediğiniz şeye sahip olursunuz.
Jason Tholstrup

7

Komut dosyanız yürütülebilir ve herhangi bir uzantıya sahip olmadığı sürece Dock'un sağ tarafına (Belge tarafı) olduğu gibi sürükleyebilirsiniz ve bir düzenleyici açmak yerine tıklandığında terminal penceresinde çalışacaktır.

Bir uzantıya (foo.sh gibi) sahip olmak istiyorsanız, Finder'daki dosya bilgisi penceresine gidebilir ve o komut dosyası için varsayılan uygulamayı her ne olursa olsun (TextEdit, TextMate, bilgisayarınızda varsayılan olarak ne olursa olsun) değiştirebilirsiniz. .sh dosyaları) Terminal'e. Daha sonra bir metin düzenleyicide açmak yerine yürütülür. Yine, Dock'un sağ tarafına sürüklemeniz gerekecek.


1
NOT : Bu OS X 10.10 Yosemite'de bir şampiyon gibi çalışır. 10.9 hakkında yorum yapamam
Bryan Ash

1
10.11'de çalışır. Teşekkür ederim!
Yassine Imounachen

10.12 üzerinde de çalışıyor! Belki de 10.9 hakkındaki yorumum yanlıştı, ancak ayırıcı altındaki dock kısmına sürüklediğinizden emin olmanız gerektiğini fark ettim. Ne yazık ki 10.9'u tekrar test etmem mümkün değil.
stiemannkj1

Dock'a eklemenize gerek yok. Masaüstünden çalıştırılabilir. Ancak uzantı olamaz. Yürütülebilir hale getirin ve çift tıklayabilirsiniz. Bu gördüğüm en basit seçenektir.
Zengin Apodaca

5

Bu konunun yararlı olabileceğini düşünüyorum: http://forums.macosxhints.com/archive/index.php/t-70973.html

Başka bir deyişle, .command uzantısıyla yeniden adlandırabilir veya kabuğu çalıştırmak için bir AppleScript oluşturabilirsiniz.


En azından Snow Leopard'da, bir komut dosyasına bir .command uzantısı eklemek, dosyayı çift tıklarsanız uçbirimde çalıştırır, ancak bazı nedenlerden dolayı hala dock'a sürükleyemezsiniz. Yine de dbr's ve Jeremy'nin önerileri benim için çalıştı.
Jo Liss

5

Bahsedildiği gibi joe, kabuk komut dosyasını oluşturmak ve sonra kabuk komut dosyasını çağırmak için bir elma komut dosyası oluşturmak, bunu başaracak ve oldukça kullanışlıdır.

Kabuk Betiği

  1. En sevdiğiniz metin düzenleyicide kabuk komut dosyanızı oluşturun, örneğin:

    mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"

    (bu, mono çerçeveyi kullanarak w32 yürütülebilir dosyasını çalıştırır)

  2. Kabuk betiğini kaydet, örneğin "StartKeepass.sh"

Apple Script

  1. AppleScript Editor'ı açın ve kabuk komut dosyasını çağırın

    do shell script "sh /Volumes/Media/~Users/me/Software/StartKeepass.sh" user name "<enter username here>" password "<Enter password here>" with administrator privileges

    • do shell script - dış kabuk komutlarını çağırmak için applecript komutu
    • "sh ...." - Bu, birinci adımda oluşturulan kabuk komut dosyanızdır (tam yol) (ayrıca doğrudan komutları çalıştırabilirsiniz, kabuk komut dosyasını atlayabilir ve burada mono komutumu çalıştırabilirim)
    • user name - komutu belirli bir kullanıcı olarak çalıştırmak istediğiniz el yazısını beyan eder
    • "<enter username here> - kullanıcı adınızla değiştirin (tırnak işaretleri koruyun) ex "josh"
    • password - şifrenizi applecript olarak beyan eder
    • "<enter password here>" - şifrenizi değiştirin (tırnak işaretlerini koruyun) ex "mypass"
    • with administrative privileges - yönetici olarak çalıştırmak istediğinizi beyan eder

.APP'nizi oluşturun

  1. El yazınızı dosyaadı.scpt olarak kaydet, benim durumumda RunKeepass.scpt

  2. elma yazınız olarak kaydedin ve dosya biçimini uygulamaya dönüştürün, bu da benim durumumda RunKeepass.app ile sonuçlandı

  3. Uygulama dosyanızı uygulamalar klasörünüze kopyalayın


5

Komut Dosyası Düzenleyicisi'nde:

do shell script "/full/path/to/your/script -with 'all desired args'"

Uygulama paketi olarak kaydedin.

Yapmak istediğiniz tek şey komut dosyasının etkisini elde etmek olduğu sürece, bu iyi çalışır. STDOUT veya STDERR görmeyeceksiniz.


2
Şunu öneririm: "Bir uygulama olarak kaydet" Paketler uygulamalardan çok daha hızlı başlatılır.
James James

-3

Birisi yazdı ...

Ben sadece ".sh" ile biten tüm dosyaları Terminal ile açılacak şekilde ayarladım. İyi çalışıyor ve çalıştırmak istediğiniz her kabuk betiğinin adını değiştirmek zorunda değilsiniz.

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.