Bulucuda seçili dosyalar / klasörler içeren bir kabuk komut dosyası nasıl çalıştırılır?


13

Linux'tan nautilus veya yunustaki bir dizi dosyaya karşı komut dosyası çalıştırmanın kolay olduğu bir yerdeyim, ancak OSX'te bunun kolay olmadığını görünce şaşırdım.

Tercihen, bulucudaki bazı seçimleri ctrl tuşuna basarak tıklatabilir, senaryomu seçebilir ve ilerleme durumunu veya herhangi bir kullanıcı etkileşimini göstermek için bir terminal penceresinin açılmasını isterim.

Yanıtlar:


8

Bunu yapmanın en kolay ve yerleşik yolu, öğeleri Finder'dan bir Terminal penceresine sürüklemektir . Onları bıraktığınızda, Terminal (kaçan) yol adlarını “yazacaktır”. Daha sonra komutun geri kalanını girmek için kabuğunuzun komut satırı düzenlemesini kullanabilirsiniz. Ya da ileriyi düşünüyorsanız, önce komutu yazıp öğeleri sürükleyebilirsiniz.

“Önce sürükleyin” sürümü:

  1. Bazı Finder öğelerini seçip kabuk istemi gösteren bir Terminal penceresine sürükleyin . Terminal (çıkış karakterli) yol adlarını ekler.
  2. Control+ Yazın A(satırın başına gidin; ⌃A varsayılan değerdir, ancak kabuk / yapılandırmaya göre değişir).
  3. Komutunuzu ve bir boşluk yazın (yol adlarından önce eklenir).

“İleriyi düşünmek” versiyonu:

  1. Herhangi bir sırayla, her ikisini de yapın:
    • Bir de Terminal penceresine, (yol adlarının dışında her şeyi) komuta ve uzay baştarafını yazın.
    • Finder'da bazı öğeleri seçin .
  2. Seçili öğeleri sürükleyin Finder için Terminal komutunu yazdığınız pencereye.
  3. Terminal penceresini etkinleştirin ve düğmesine basın Return.

Daha otomatik bir çözüme ihtiyacınız varsa (diğer yanıtların belirttiği gibi) AppleScript veya Automator'a dönebilirsiniz. Ekstra “hareketli parçalar” çözüme biraz karmaşıklık kazandırabileceğinden, yukarıdaki işlemin avantajlarını (manuel, ancak esnek) bir veya daha fazla otomatik çözümün uygulanmasının karmaşıklığına karşı tartmanız gerekir.

Otomasyon olanaklarından bazıları şunlardır:

  • bir AppleScript damlacık uygulaması
  • yerleşik komut dosyası menüsü veya başka bir başlatıcı tarafından başlatılan düz bir AppleScript programı
    • Finder'ın seçiminden yol adları al
  • Automator iş akışı, uygulama veya Finder eklentisi
  • yürütülebilir bir .commanddosya (genellikle kabuk betiği; Terminal'de çalıştırmak için Finder'da açın )
    • Finder'ın seçiminden yol adları al ( osascript aracılığıyla )
  • zaten ihtiyacınız olan işlevselliği sağlayan bazı üçüncü taraf araçları

7

Bunu doğrudan yapmanın bir yolu olduğunu sanmıyorum. Aradığın bazı şeyleri yapacak bir "Automator" uygulaması oluşturabilirsin. Bu, Automator yığınının nasıl görüneceğini gösterir:

resim açıklamasını buraya girin

Sonucu bir Uygulama olarak kaydedin, ardından bulucuda dosyaları seçin, sağ tıklayın ve "Birlikte aç" ı seçin ve ardından uygulamanızı seçin. (Uygulama listesinin altındaki "Diğer ..." seçeneğini seçmeniz gerekebilir.)

Bu yöntemle komut dosyasıyla etkileşime giremezsiniz, ancak bazı kabuk komut dosyası gerçekleştirmek için dosyaların üzerinde döngü yapabilirsiniz.


Dosyaları uygulama simgesinin üzerine sürükleyip bırakmak daha da kolaydır.
kiamlaluno

5

Hizmetler , bu tür şeyleri nasıl ele .

Uygulama Menüsü altında (bu durumda 'Finder') her zaman Servicesgeçerli Uygulama ve geçerli durumu için geçerli olan Hizmetleri sağlayacak (neredeyse) bir menü seçeneği vardır . Tipik olarak durum, ne tür bir nesnenin seçildiğidir (metin, dosya / klasör vb.).

Sistem Tercihleri ​​panelinde bu üçünden yalnızca sonuncusu için anlamlı olan etkinleştirilebilir, devre dışı bırakılabilir ve atanmış klavye kısayolları olabilir Keyboard.

Klavye kısayolları

Finder'daki dosyalara / klasörlere kabuk komut dosyası uygulayan bir Hizmet oluşturmak için:

Başlatın ve yeni bir hale Servicetip belge.

Yeni Hizmet

  • Hizmetin uygulanacağı nesne türünü ayarlama ( files or folders)
  • Hizmetin kullanılabileceği Uygulamayı ayarlama ( )
    • Alternatif olarak bir Get Selected Finder Itemseylem vardır.
  • bir eylem eklemek Run Shell Script
  • girdinin bağımsız değişken mi yoksa mi olduğuna karar verin

Bunun gibi bir şeye benzemeli:

örnek kabuk betiği

, ~/Library/Serviceskaydettiğinizde Application -> Servicesmenü veya bağlamsal (sağ tıklama) menüsü aracılığıyla hemen (hemen hemen) kullanılabilir hale getirecek şekilde otomatik olarak klasörünüze yerleştirecektir .

Test klasörleri

sonuçta ortaya çıkan TextEdit belgesi



2

Yukarıdaki cevaplara dayanarak, bu şeyi inşa ettim

https://github.com/commonpike/DropShell

Temelde bırakılan dosyalarla argüman olarak uygulamada bulunan bir kabuk dosyasını çağıran bir el yazısı uygulaması. Kabuk betiğini gerektiği gibi değiştirebilirsiniz.


2

Commonpike'ın cevabına dayanarak, üzerine bırakılan tüm dosyaları eşleşen ada sahip bir kabuk komut dosyasına yönlendiren bir AppleScript oluşturdum. Apple'ın ScriptEditor uygulamasından uygulama olarak kaydedin ve script.sh ile eşleştirmek için script.app olarak yeniden adlandırın. Https://github.com/PHolker/scripts/blob/master/DropScript.scpt


1

Mac OS X'te tercih edilen kod dili Applescript'tir. Bir damlacık (bazı dosyaları simgesinin üzerine bıraktığınızda bir şeyler yapacak bir komut dosyası) oluşturabilir, komut dosyası (uygulama olarak kaydedilebilir) simgesini masaüstüne yerleştirebilir ve aktarmak istediğiniz dosyaları sürükleyip bırakabilirsiniz. senaryo.

Alternatif olarak, klasör eylemlerini kullanabilirsiniz. Bir komut dosyasını Applescript'i, bazı dosyalar (veya dizinler) klasörün üzerine bırakıldığı her zaman yürütülecek bir klasörle ilişkilendirmek mümkündür.


1

Bunu da yapmak istiyorum, ancak yukarıdaki çözümlerin aksine, bir kabuk komut dosyası için alıntı parametreler üretmek istedim. Bu diğer yöntemler iyi, ama gerçekten istediğiniz şey olduğunda "sadece command-v terminaline" önermeye benziyorlar pbpaste.

Her Finder seçimi için dosya parametrelerine genişletilen komut dosyalarında kullanabileceğim bir kabuk işlevi yapmak istedim. Balık kabuğunu kullanıyorum ve bu biraz işe yarıyor gibi görünüyor:

function selection
    osascript -e "tell application \"Finder\" to set s to the selection as alias list" -e "repeat with f in s" -e "set contents of f to POSIX path of f" -e "end repeat" -e "set AppleScript's text item delimiters to linefeed" -e "s as string"
end

(Yine balık kabuğunda) kullanılır convert-video (selection).

Bir bash işlevinde, çıktıyı | tr '\n' '\0' | xargs -0 printf "%q" {}osascript komutunun sonundaki gibi bir şeyle alıntılamak gerekebilir , emin değilim.

(not: son 2 saat içinde yeniden öğrendiğim ve yarın unutacağım gelişmiş elma kabuğu ve kabuk komut dosyası hakkında bildiğim her şey)


Bunu son zamanlarda bash yapmaya çalışıyordu, başarısız oldu, burada sordu superuser.com/questions/1353966 , aşağıdakileri gösteren cevaplar aldı: hayır, mümkün değil: ^ (Kaybettiğinizde Bash, işim Mac'te balık kabuğuna da geçeceksiniz. Chris Johnsen'in yukarıda bahsettiği drag-to-finder hilesini çok kullanıyorum ki
Pierre Houston
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.