0 votos

Obtener la ruta actual si se está utilizando AppleScript como expresión osascript

Tengo el siguiente AppleScript:

tell application "Finder"
    set current_path to container of (path to me) as string
    duplicate file (current_path & "foo.txt")
end tell

Funciona, pero necesito pasarle una expresión osascript. Es decir, todo el flujo de trabajo se ve así:

  1. Abrir la aplicación Terminal

  2. Ejecutar

    cd ~/test

    (la carpeta en la que se encuentra el archivo foo.txt y la carpeta bar).

  3. Ejecutar

    osascript -l AppleScript -e 'tell application "Finder"' -e 'set current_path to container of (path to me) as string' -e 'duplicate file (current_path & "foo.txt") --to folder (current_path & "bar")' -e 'end tell'

El problema es que current_path ahora se interpreta como Macintosh HD:usr:bin y no como Macintosh HD:Usuarios:usuario:juan:prueba. ¿Cómo solucionar esto?

2voto

Mikhail Morfikov Puntos 356

Una opción es pasar el directorio a osascript como parámetro:

#!/usr/bin/env zsh

osascript -l AppleScript - ~/test << EOF
  on run argv
    set work_path to ((POSIX file (item 1 of argv)) as alias) as string
    tell application "Finder"
      duplicate file (work_path & "foo.txt") to (work_path & "bar")

  end run
EOF
  • on run argv ... - según la página del manual de osascript, así es como se acceden los parámetros de línea de comando pasados desde la terminal.
  • (item 1 of argv) - el primer parámetro.
  • (POSIX file (...) - convierte una cadena en forma de /a/b/c a una ruta.
  • (...) as alias - convierte la ruta POSIX en un objeto vol:dir:dir:....
  • (...) as string - convierte el alias en una cadena vol:dir:dir:... para que funcione el apéndice.
  • tell... - el comando de duplicación de archivos.

<< EOF ... EOF es un documento aquí. Las líneas que siguen se pasan al stdin de osascript. Parece ser un poco más conveniente que un conjunto de parámetros -e.

1voto

red_menace Puntos 111

Otra opción sería usar expansiones de shell regulares en el heredoc, por ejemplo:

osascript << SCRIPT
set current to "$(pwd)" as POSIX file as text
tell application "Finder" to duplicate file (current & "foo.txt") to folder (current & "bar")
SCRIPT

También, si se está utilizando osascript para ejecutar un archivo de script regular, NSProcessInfo se puede usar para obtener el entorno desde el cual el proceso fue lanzado. Por ejemplo, si el siguiente script fuera guardado en algún lugar:

use framework "Foundation"
use scripting additions

set processArgs to (current application's NSProcessInfo's processInfo's environment) as record
set current to (PWD of processArgs) as POSIX file as text
tell application "Finder" to duplicate file (current & "foo.txt") to folder (current & "bar")

Luego desde la terminal puedes hacer cd a cualquier directorio y usar osascript /ruta/al/archivo.scpt.

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