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, foldersiç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 FolderPathkesinlikle geçerli dizini alır. Bir say $FolderPathkabuk 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 saykomutu konuşan başka bir komut daha koydum pwdve 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 touchkomut 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 bashne 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.
cdaslında dizinleri değiştirmez.
$(cd $FolderPath)yerine kullanıyorsunuzcd $FolderPath?