Automator servisi üzerinden bir içerik menüsü komutu oluşturmaya çalışıyorum. İçerik menüsü komutu, verilen dizinde bazı varsayılan belgeler oluşturmak için bir kabuk betiği çalıştırır.
Hedef dizinden çalıştırıldığında doğru çalışan kabuk betiğini yazdım:
#!/bin/bash
touch History.markdown
touch Notes.markdown
touch Plan.markdown
touch ProjectName.tmproj
cat <<TEXT > ProjectName.tmproj
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>currentDocument</key>
<string>Notes.markdown</string>
<key>documents</key>
<array>
<dict>
<key>filename</key>
<string>Notes.markdown</string>
<key>selected</key>
<true/>
</dict>
<dict>
<key>filename</key>
<string>History.markdown</string>
</dict>
<dict>
<key>filename</key>
<string>Plan.markdown</string>
</dict>
</array>
<key>openDocuments</key>
<array>
<string>History.markdown</string>
<string>Notes.markdown</string>
<string>Plan.markdown</string>
</array>
<key>fileHierarchyDrawerWidth</key>
<integer>200</integer>
<key>metaData</key>
<dict/>
<key>showFileHierarchyDrawer</key>
<true/>
<key>windowFrame</key>
<string>{{113, 95}, {1230, 900}}</string>
</dict>
</plist>
TEXT
Daha sonra Automator'ı açtım ve yeni bir servis oluşturdum. Hizmeti, folders
içinde seçilen girişi alacak şekilde ayarladım Finder
.
Daha sonra, seçilen dizini standart girdi olarak almak için aşağıdakileri kabuk betiğimin üstüne ekledim:
FolderPath=$1
$(cd $FolderPath)
Değişken FolderPath
kesinlikle geçerli dizini alır. Bir say $FolderPath
kabuk betiğine bir a ekledim ve bağlam menü komutundan çalıştırıldığında tüm yolu belirtir.
Sorun, değişkendeki dizine geçmeye çalıştığımda hiçbir şeyin olmaması. Dizin değiştikten sonra say
komutu konuşan başka bir komut daha koydum pwd
ve kullanıcının kökünde olduğumu söylüyor.
Shell komut dosyaları ile uğraşırken otomatörün farklı yaptığı bir şey var mı?
İşte tüm hizmetin bir ekran görüntüsü.
Ayrıca sadece klasör yolunu ve touch
komut ile oluşturmaya çalıştığım dosya adını birleştirmeyi denedim ve bunu yaptığımda yalnızca oluşturmak için dosyanın dize adını kullanır:
say "$FilePath/History.markdown" # only says "History dot markdown"
Herhangi bir yardım çok takdir edilecektir!
cd $FolderPath
İlk önce denedim ve işe yaramadı, ben de emri zorla vermeye çalıştım $()
ve hala işe yaramadıktan sonra çekip açmadım.
$()
, doğrudan çalıştırmak bash
ne olacağını görmek için.
$()
, komutu bir alt kabuktaki parens içindeki komutu çalıştırdığında kullanmaya zorlayabilir ve sonucu döndürür (benim komutuma bakıldığında yine de cd komutuyla hiçbir şey yapmaz, çünkü navigasyonun kapsamı alt kabuktur). Her iki durumda da, bash'de çalıştırdım ve iyi çalışıyor (başlangıçta bash için yaptım). Az önce bir test olarak, bir kabuk çalıştırdığınızda başarıyla yürütür aşağıdaki komutu yazdı: say $(pwd) FolderPath="/Volumes/Secure/TEMP/" cd $FolderPath say $(pwd)
. Automator'da kullanılan aynı yapı, dizini başarıyla değiştirmez.
cd
aslında dizinleri değiştirmez.
$(cd $FolderPath)
yerine kullanıyorsunuzcd $FolderPath
?