¿Cómo manejo (por ejemplo, escape correctamente) los parens en un valor de clave de 'escritura predeterminada ...'?

2

TL; DR

En defaults write <domain> <key> <value> , ¿cómo proporciono un <value> que contiene parens; es decir, "corchetes" redondos, "(" y ")"?

Bhoona completa

Estoy usando defaults para redirigir las capturas de pantalla a un directorio específico. Puedo hacerlo bien y muchas veces en el pasado, pero tengo un problema cuando el directorio de destino tiene 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 recibo un error del formulario:

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

Pero entiendo eso a pesar de intentar todo lo siguiente (y un montón más, además). En esto, asuma que el nombre del directorio (preexistente) en cuestión es, literalmente, dirname (con) parens. 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 repetí ambas, tres veces cada una, reemplazando el single \ con \\, \\\ y \\\\. Mismo error.

Sin embargo, tenga en cuenta que el error parece sugerir que el globo de shell en sí está funcionando bien, porque los 'valores predeterminados' están viendo el "(y") "sin escape correctamente. Y si el nombre del directorio / ruta no contiene parens, sino espacios en blanco, entonces un simple \ -escape funciona bien (como lo hace la cita). Finalmente, observo que para los comandos de shell, como "mkdir", cualquiera de \ -escaping parens, o citarlos, también funciona:

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

Por lo tanto, un sospechoso probable es defaults . man defaults no ofrece mucho, solo dice que dice que, "el valor debe ser una lista de propiedades y debe estar entre comillas simples" . E incluso eso es una mentira. En la práctica, solo debe estar entre comillas simples si contiene algo funky, e incluso allí, si el funkiness es un espacio en blanco, \ -escaping servirá. Y, por supuesto, si la curiosidad es paréntesis, entonces ni siquiera la comilla parece funcionar.

Entonces, ¿alguna idea? Gracias!

P.S. Soy consciente de y he utilizado soluciones provisionales. Por ejemplo, puedo crear un enlace simbólico no problemático al directorio real infestado de parens, y simplemente dar a defaults el enlace simbólico como <value> . Pero realmente me gustaría llegar al fondo de esto.

    
pregunta tkp 03.10.2017 - 18:13

1 respuesta

3

Para escapar de Parens correctamente en el comando de valores predeterminados, tiene que usar comillas y dentro de las comillas comillas simples:

Ejemplo:

defaults write com.apple.screencapture location "'/Users/user/Desktop/(Screenshots)'"
    
respondido por el klanomath 03.10.2017 - 19:00

Lea otras preguntas en las etiquetas