4 votos

Hacer de AppleScript shell no funciona en el directorio de soporte de aplicaciones

Me he pasado el día haciendo varias investigaciones y de los intentos de cómo copiar un archivo que se encuentra dentro de un AppleScript aplicación a la root de Soporte de la Aplicación del directorio (hdd -> Library -> Application Support). Originalmente pensé que era un problema con llamar a do shell script y administrator privileges , pero por alguna razón si tengo un archivo que se encuentra en un AppleScript app trato de llamar a ese archivo para ser añadido a la Solicitud de Apoyo, por ejemplo:

set foo to "Macintosh HD/Users/vader/someapp.app/Contents/Resources/Scripts/foobar.txt"
set bar to "Macintosh HD/Library/Application Support/"

do shell script "cp " & (quoted form of foo) & space & (quoted form of bar) with administrator privileges

Me he tomado esto a la forma básica cuando se trata de la ruta de la carpeta y la ruta del archivo, pero cuando corro el de arriba me sale un mensaje de error de:

cp: Macintosh HD/Users/vader/someapp.app/Contents/Resources/Scripts/foobar.txt: No el fichero o el directorio

Puedo devolver cierto que existe el archivo en la aplicación con:

set foobar to POSIX path of (path to resource "foobar.txt" in directory "Scripts")
if not (exists foobar) then
    return false
else
    return true
end if

He probado con esto:

tell application "Finder" to duplicate file (foo) to folder (bar)

pero eso tampoco funcionó.

La investigación cuando traté de quitar el archivo después de la adición manual (sí tengo permisos de administrador en mi caja):

Yo he investigado varias áreas a ver cómo implementar las peticiones de permisos de uso administrator privileges , pero no hubo suerte:

Aquí están los siguientes intentos, he probado con:

AppleScript Los Eventos Del Sistema:

tell application "System Events" to delete file appWithPath

¿shell intentos:

intento 1

do shell script "rm -f " & appNamewithQuotedFormPath with administrator privileges

intento 2

do shell script "find " & quotedPathToDirectory & " -name \"" & applicationName & "\" -type f -delete" with administrator privileges

Todavía no iba a funcionar y he comprobado con:

do shell script "echo " & appNamewithQuotedFormPath with administrator privileges

Después de cavar en el Editor de secuencias de Comandos me di cuenta de que estaba recibiendo -10004 error así que he investigado:

así que me mudé el complemento y la eliminación de los archivos en el Soporte de la Aplicación a un controlador que no tiene un bloque try, pero aún nada.

Pensando que podría ser un problema con la utilizada privilegios he probado todos de los siguientes parámetros que se utilizan con Scripting Additions:

enter image description here

En un AppleScript aplicación ¿cómo puedo agregar y eliminar un archivo que existe en la aplicación a la root de Soporte de la Aplicación del directorio?


EDITAR:

Después de más pruebas he eliminado el uso de Macintosh HD y do shell script trabajaría que no entiendo el motivo que causa la falla del guión. ¿Por qué la adición de Macintosh HD a la ruta de acceso de la causa que la secuencia de comandos de error?

2voto

user3439894 Puntos 5883

Si usted está codificar, sin pruebas, si existe el archivo, utilice el siguiente ejemplo:

set foo to quoted form of "/Users/vader/someapp.app/Contents/Resources/Scripts/foobar.txt"
set bar to quoted form of "/Library/Application Support/"
try
    do shell script "cp " & foo & space & bar with administrator privileges
end try

Si usted está llamando desde el script dentro del paquete de la aplicación, utilice el siguiente ejemplo:

on run
    try
        set foo to POSIX path of (path to me as string) & "Contents/Resources/Scripts/foobar.txt"
        set bar to quoted form of "/Library/Application Support/"

        tell application "System Events"
            if exists file foo then
                tell current application
                    do shell script "cp " & quoted form of foo & space & bar with administrator privileges
                end tell
            end if
        end tell
    on error eStr number eNum
        display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with icon caution
        return
    end try
end run

Nota: Cuando se trabaja con el do shell script comando, POSIX ruta de acceso debe ser utilizado, no se alias. Macintosh HD no es válido en un POSIX path, sólo en un alias. En un POSIX path de la startup disk, todo comienza en la root del volumen: /

Ejemplo:

tell application "Finder" to get name of startup disk as alias
tell application "Finder" to get POSIX path of (name of startup disk as alias)

Devuelve:

Macintosh HD 
/

1voto

Nate Puntos 220

@user3439894 ya ha explicado cómo resolver el problema; me gustaría tomar una puñalada en el que explica por qué la confusión que existe. Se remonta al hecho de que el sistema operativo Macintosh no siempre fue basado en unix (/POSIX). De vuelta antes de que OS X (que es basado en unix), Mac OS era completamente diferente del sistema operativo, con su propia ruta de acceso del archivo de notación. Cuando OS X salió que tenía que apoyar tanto el archivo de unix de acceso Api (que utiliza unix notación de ruta de acceso) y el tradicional Mac OS Api (que utiliza tradicionales Mac OS notación de ruta de acceso). A través de los años, OS X (/macOS) ha dejado de utilizar algunos de los tradicionales Mac OS Api y encendía más y más hacia la pura unix notación de ruta de acceso. Pero AppleScript es una excepción: es anterior a OS X, por lo que se utiliza de forma nativa los viejos y tradicionales Mac OS notación.

He aquí un resumen de las diferencias:

  • Unix (/POSIX) rutas de utilizar "/" como delimitadores (y permitir ":" dentro de los nombres de archivo), mientras que Mac OS caminos de uso ":" como delimitadores (y permitir "/" dentro de los nombres de archivo).
  • Unix caminos son absolutas, si empiezan con el delimitador ("/"); Mac OS caminos son absolutas, si no empezar con el delimitador (":").
  • Absoluta Mac OS caminos de inicio con el nombre del volumen, mientras que la absoluta unix caminos comienzan en la parte superior del volumen de la root, y otros volúmenes aparecen como carpetas en algún lugar debajo de ella.

Aquí están algunos ejemplos:

Mac OS: Macintosh HD:Users:vader:someapp.app:Contents:Resources:Scripts:foobar.txt
Unix: /Users/vader/someapp.app/Contents/Resources/Scripts/foobar.txt

Mac OS: Other disk:daily notes:7/19/2017 meeting.rtf
Unix: /Volumes/Other disk/daily notes/7:19:2017 meeting.rtf

Mac OS: :Documents:file.txt
Unix: Documents/file.txt

En AppleScript, puede utilizar POSIX path of y as alias para convertir entre estos.

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