1 votos

Automatizador: Cambiar al directorio seleccionado y ejecutar el shell script

Estoy intentando crear un comando de menú contextual a través del servicio Automator. El comando del menú contextual ejecutará un shell script para crear algunos documentos por defecto en el directorio dado.

Escribí el shell script 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 que recibiera la entrada seleccionada de folders en Finder .

Entonces añadí lo siguiente en la parte superior de mi shell script para recibir el directorio seleccionado como entrada estándar:

FolderPath=$1
$(cd $FolderPath)

La variable FolderPath obtiene definitivamente el directorio actual. He añadido un say $FolderPath al shell script y dice toda la ruta cuando se ejecuta desde el comando del menú contextual.

El problema es que cuando intento cambiar al directorio de la variable, no pasa nada. Pongo otro say que habló el comando pwd después del cambio de directorio y dice que estoy en el Root de mi usuario.

¿Hay algo que Automator haga de manera diferente cuando se trata de shell scripts?

Aquí hay una captura de pantalla de todo el servicio. enter image description here

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 y cuando lo hago sólo utiliza el nombre de la cadena del archivo a crear:

say "$FilePath/History.markdown" # only says "History dot markdown"

Cualquier ayuda será muy apreciada.

3voto

0942v8653 Puntos 3617

El problema aquí es que tienes la entrada que se pasa a stdin . No sé por qué es el valor por defecto, pero deberías poder cambiar el menú emergente en la parte superior derecha a "como argumentos". Yo hice eso y añadí cd "$1" a la parte superior del script y funcionó.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X