Estoy tratando de crear un comando de menú contextual a través del servicio Automator. El comando del menú contextual ejecutará un script de shell para crear algunos documentos predeterminados en el directorio dado.
Escribí el script de shell que se ejecuta correctamente cuando se ejecuta desde el directorio de destino:
#!/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
Luego abrí Automator y creé un nuevo servicio. Configuré el servicio para recibir la entrada seleccionada de folders
en Finder
.
Luego agregué lo siguiente en la parte superior de mi script de shell para recibir el directorio seleccionado como entrada estándar:
FolderPath=$1
$(cd $FolderPath)
La variable FolderPath
definitivamente obtiene el directorio actual. Agregué say $FolderPath
a la secuencia de comandos de Shell y dice la ruta completa cuando se ejecuta desde el comando del menú contextual.
El problema es que cuando trato de cambiar al directorio en la variable, no pasa nada. Puse otro say
comando que pronunció el comando pwd
después del cambio de directorio y dice que estoy en la raíz de mi usuario.
¿Hay algo que Automator haga de manera diferente cuando se trata de scripts de shell?
Aquí hay una captura de pantalla de todo el servicio.
También debo mencionar que he intentado simplemente concatenar la ruta de la carpeta y el nombre del archivo que he intentado crear con el touch
comando y cuando lo hago, solo usa el nombre de la cadena del archivo para crear:
say "$FilePath/History.markdown" # only says "History dot markdown"
¡Cualquier ayuda sería muy apreciada!
El problema aquí es que la entrada se pasa a stdin
. No sé por qué ese es el valor predeterminado, pero debería poder cambiar el menú emergente en la parte superior derecha a "como argumentos". Hice eso y agregué cd "$1"
a la parte superior de la secuencia de comandos y funcionó.
as arguments
y todo funcionó como debería. ¡Gracias por la ayuda!
sin ladera
$(cd $FolderPath)
en lugar decd $FolderPath
?chris schmitz
cd $FolderPath
primero y no funcionó, así que intenté forzar el comando$()
y simplemente no lo saqué después de que todavía no funcionó.sin ladera
$()
, ejecútelo directamentebash
para ver qué sucede.chris schmitz
$()
ya que ejecuta el comando dentro de los paréntesis en una subcapa y devuelve el resultado (aunque mirando hacia atrás en mi comando ahora, no haría nada con el comando cd porque el alcance de la navegación es la subcapa). De cualquier manera, lo ejecuté en bash y funciona bien (lo construí originalmente para bash). Como prueba, escribí el siguiente comando que se ejecuta con éxito cuando se ejecuta desde un shell:say $(pwd) FolderPath="/Volumes/Secure/TEMP/" cd $FolderPath say $(pwd)
. La misma estructura utilizada en Automator no cambia correctamente el directorio.chris schmitz
cd
cambia de directorio.