Ich versuche, einen Kontextmenübefehl über den Automator-Dienst zu erstellen. Der Kontextmenübefehl führt ein Shell-Skript aus, um einige Standarddokumente im angegebenen Verzeichnis zu erstellen.
Ich habe das Shell-Skript geschrieben, das korrekt ausgeführt wird, wenn es aus dem Zielverzeichnis ausgeführt wird:
#!/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
Ich habe dann Automator geöffnet und einen neuen Dienst erstellt. folders
Ich habe den Dienst so eingestellt, dass er ausgewählte Eingaben von in empfängt Finder
.
Ich habe dann am Anfang meines Shell-Skripts Folgendes hinzugefügt, um das ausgewählte Verzeichnis als Standardeingabe zu erhalten:
FolderPath=$1
$(cd $FolderPath)
Die Variable FolderPath
bekommt auf jeden Fall das aktuelle Verzeichnis. Ich habe dem Shell-Skript ein hinzugefügt say $FolderPath
und es sagt den gesamten Pfad aus, wenn es über den Kontextmenübefehl ausgeführt wird.
Das Problem ist, dass nichts passiert, wenn ich versuche, in das Verzeichnis in der Variablen zu wechseln. Ich habe einen anderen say
Befehl eingefügt, der den Befehl pwd
nach dem Verzeichniswechsel gesprochen hat, und er besagt, dass ich im Stammverzeichnis meines Benutzers bin.
Gibt es etwas, das Automator beim Umgang mit Shell-Skripten anders macht?
Hier ist ein Screenshot des gesamten Dienstes.
Ich sollte auch erwähnen, dass ich versucht habe, den Ordnerpfad und den Dateinamen, den ich versucht habe, mit dem touch
Befehl zu erstellen, einfach zu verketten, und wenn ich dies tue, wird nur der Zeichenfolgenname der zu erstellenden Datei verwendet:
say "$FilePath/History.markdown" # only says "History dot markdown"
Jede Hilfe wäre sehr willkommen!
Das Problem hier ist, dass Sie die Eingabe an übergeben haben stdin
. Ich weiß nicht, warum das die Standardeinstellung ist, aber Sie sollten in der Lage sein, das Popup-Menü oben rechts einfach auf "als Argumente" zu ändern. Ich habe das getan und cd "$1"
am Anfang des Skripts hinzugefügt und es hat funktioniert.
as arguments
und alles funktioniert wie es soll. Danke für die Hilfe!
kein Hang
$(cd $FolderPath)
stattcd $FolderPath
?Chris Schmitz
cd $FolderPath
zuerst versucht und es hat nicht funktioniert, also habe ich versucht, den Befehl mit zu erzwingen$()
und ihn einfach nicht herausgezogen, nachdem es immer noch nicht funktioniert hat.kein Hang
$()
, führen Sie ihn direkt in ausbash
, um zu sehen, was passiert.Chris Schmitz
$()
da der Befehl innerhalb der Klammern in einer Subshell ausgeführt und das Ergebnis zurückgegeben wird (obwohl er jetzt auf meinen Befehl zurückblickt, würde er nichts mit dem cd-Befehl tun, da der Bereich der Navigation die Subshell ist). Wie auch immer, ich habe es in Bash ausgeführt und es funktioniert gut (ich habe es ursprünglich für Bash gebaut). Als Test habe ich gerade den folgenden Befehl geschrieben, der erfolgreich ausgeführt wird, wenn er von einer Shell ausgeführt wird:say $(pwd) FolderPath="/Volumes/Secure/TEMP/" cd $FolderPath say $(pwd)
. Dieselbe Struktur, die im Automator verwendet wird, ändert das Verzeichnis nicht erfolgreich.Chris Schmitz
cd
ändert nicht wirklich Verzeichnisse.