4 votos

¿Cómo se comportan (e.g. correctamente escape) parens en un ' valores predeterminados escriben... ' clave valor?

TL;DR

En defaults write <domain> <key> <value>, ¿cómo le hago un <value> que contiene paréntesis; es decir, la "ronda" entre paréntesis, "(" y ")" ?

Completa Bhoona

Estoy usando defaults para redirigir las capturas de pantalla a un directorio específico. Que puedo hacer bien, y muchas veces en el pasado, pero me estoy quedando en un problema, cuando el directorio de destino ha paréntesis en su ruta de acceso. Así que estoy haciendo algo como:

$ defaults write com.apple.screencapture location <dirname-with-parens-in-it>

y estoy recibiendo un error de la forma:

<ba bla bla> Could not parse: <dirname-with-parens-in-it>.  Try single-quoting it.

Pero me da que a pesar de intentar con todos los siguientes (y un montón más). En este, se supone que el nombre de la (pre-existente) directorio en cuestión es, literalmente, dirname () paréntesis. Mis intentos y respuestas:

$ defaults write com.apple.screencapture location dirname\(with\)parens
<bla bla bla> Could not parse: dirname(with)parens.  Try single-quoting it.

$ defaults write com.apple.screencapture location 'dirname\(with\)parens'
<bla bla bla> Could not parse: dirname(with)parens.  Try single-quoting it.

Y lo he repetido tanto, tres veces cada uno, en sustitución de la única \ con \\, \\\, y \\\\. Mismo error.

Observe, sin embargo, que el error parece sugerir que la cáscara de esta expansión en sí está funcionando bien, porque 'defaults' es ver el sin escape "(" y ")" correctamente. Y si el nombre del directorio/ruta de acceso contiene no paréntesis, pero en lugar de espacios en blanco, entonces con un simple \-escape funciona bien (como lo hace citando). Por último, observo que para el shell de comandos, como "mkdir", ya sea de \-escape paréntesis, o citando a ellos, también el trabajo:

$ mkdir dirname\(with\)parens
$ ls -ld dirname*
drwxr-xr-x  2 jonyive demigods  68 Oct  3 10:56 dirname(with)parens

Así que un posible sospechoso es, defaults sí. man defaults no ofrece mucho, diciendo sólo que dice que, "el valor debe ser una propiedad de la lista, y debe estar entre comillas simples". Y ni siquiera eso es una mentira. En la práctica sólo debe estar entre comillas simples si contiene algo de funky, e incluso allí, si el funkiness es el espacio en blanco, \-escape va a hacer. Y por supuesto, si el funkiness se paréntesis, a continuación, ni siquiera a un solo citando parece funcionar.

Así que, ¿alguna idea? Gracias!

P. S. soy consciente de y han utilizado soluciones. Por ejemplo, puedo crear un no-problemático enlace simbólico a los paréntesis infestadas de directorio real, y acaba de dar defaults el enlace simbólico como el <value>. Pero realmente me gustaría llegar al fondo de esto.

8voto

klanomath Puntos 19587

Para escapar de parens con éxito en el comando por defecto que tienes que usar comillas y dentro de las dobles comillas:

Ejemplo:

defaults write com.apple.screencapture location "'/Users/user/Desktop/(Screenshots)'"

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