¿El comando Abrir no le gustan los caracteres no escapados incluso entre comillas?

2

¿Soy yo o el comando open solo acepta caracteres de escape en los parámetros?

Probó open "~/Library/Messages/Attachments/87/07/079C263B-0586-48C6-B721-3C6AABAC76DF/Messages Image(1020754653).jpeg"

que devuelve The file /Users/Kyro/Library/Messages/~/Library/Messages/Attachments/87/07/079C263B-0586-48C6-B721-3C6AABAC76DF/Messages Image(1020754653).jpeg does not exist.

Cuando en realidad open /Users/Kyro/Library/Messages/Attachments/87/07/079C263B-0586-48C6-B721-3C6AABAC76DF/Messages\ Image\(1020754653\).jpeg funciona bastante bien.

Editar: Ejecutando Mavericks aquí.

    
pregunta Matthieu Riegler 03.11.2013 - 23:28

3 respuestas

3

No es open , es el hecho de que ~ solo funciona cuando no está entre comillas. ~ no es realmente parte de una ruta de archivo estándar, es un metacarácter de shell que la shell reemplaza en contextos en los que parece el comienzo de una ruta (y las comillas lo suprimen). Aquí hay algunos ejemplos:

$ echo ~
/Users/gordon
$ echo "~"
~
$ ls ~/Library
Accounts        Fonts Disabled      Printers
[...]
$ ls "~/Library"
ls: ~/Library: No such file or directory

Tenga en cuenta el último comando anterior: como ~ está entre comillas dobles, no se reemplaza por la ruta a mi carpeta de inicio, y luego ls simplemente trata como un nombre de archivo normal (eso no sucede existe). Lo mismo está sucediendo en su comando open .

Ya que el archivo que realmente intentas abrir tiene otros metacaracteres de shell en su nombre, lo que deberías hacer es citar parcialmente la ruta: deja el ~ fuera de las comillas, pero asegúrate de que la parte del nombre del archivo esté entre comillas . Algo como esto:

open ~/"Library/Messages/Attachments/87/07/079C263B-0586-48C6-B721-3C6AABAC76DF/Messages Image(1020754653).jpeg"
    
respondido por el Gordon Davisson 04.11.2013 - 02:50
2

Bueno, no leí correctamente la salida del error.

open es un infierno de * .

Agrega el directorio de trabajo delante del comando cuando se utilizan comillas.

/Users/Kyro/Library/Messages/~/Library/Messages/ no tiene ningún sentido.

    
respondido por el Matthieu Riegler 04.11.2013 - 00:16
1

Como apéndice de la respuesta de @Gordon Davidsons:

De la Bash Man Page :

EXPANSIÓN

  

La expansión se realiza en la línea de comando después de que se haya dividido   en palabras Hay siete tipos de expansión que se realizan:   expansión, expansión tilde, expansión de parámetros y variables, comando   sustitución, expansión aritmética, división de palabras y nombre de ruta   expansión.

Expansión de tilde

  

Si una palabra comienza con un carácter de tilde no entre comillas ('~'), todas las   caracteres que preceden a la primera barra diagonal (o todos los caracteres,   si no hay una barra diagonal sin comillas) se consideran un prefijo de tilde. Si ninguno   de los caracteres en el prefijo de tilde se citan, los caracteres en   El prefijo de tilde que sigue a la tilde se trata como una posible   nombre de inicio de sesión. Si este nombre de inicio de sesión es la cadena nula, la tilde es   Se reemplaza con el valor del parámetro de shell HOME. Si HOME es   unset, el directorio de inicio del usuario que ejecuta el shell es   sustituido en su lugar. De lo contrario, el prefijo tilde se sustituye por el   Directorio de inicio asociado con el nombre de inicio de sesión especificado.

     

Si el prefijo de tilde es un ~+', the value of the shell variable PWD replaces the tilde-prefix. If the tilde-prefix is a ~ - ', el valor   de la variable de shell OLDPWD, si se establece, se sustituye. Si el   los caracteres que siguen a la tilde en el prefijo de tilde consisten en un número   N, opcionalmente prefijado por un +' or a - ', el prefijo tilde es   reemplazado con el elemento correspondiente de la pila de directorios, como   Sería desplegado por el directorio incorporado invocado con el   tilde-prefijo como argumento. Si los personajes que siguen a   la tilde en el prefijo tilde consiste en un número sin un +' or - ',' + 'se supone.

     

Si el nombre de inicio de sesión no es válido o la expansión de la tilde falla, la palabra   no ha cambiado.

     

Cada asignación de variable se comprueba para los prefijos de tilde no entre comillas   Inmediatamente después de un: o el primero =. En estos casos,   También se realiza la expansión de la tilde. En consecuencia, uno puede usar el archivo   nombres con tildes en asignaciones a PATH, MAILPATH y CDPATH, y   el shell asigna el valor expandido.

    
respondido por el markhunte 04.11.2013 - 03:04

Lea otras preguntas en las etiquetas