En defaults write <domain> <key> <value>
, ¿cómo proporciono un <value>
que contiene paréntesis; es decir, corchetes "redondos", "(" y ")" ?
Estoy usando defaults
para redirigir capturas de pantalla a un directorio específico. Eso puedo hacerlo bien, y lo he hecho muchas veces en el pasado, pero me encuentro con un problema cuando el directorio de destino tiene paréntesis en su nombre de ruta. 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 lo entiendo a pesar de intentar todo lo siguiente (y un montón más además). En esto, suponga que el nombre del directorio (preexistente) en cuestión es, literalmente, dirname(with)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í ambos, tres veces cada uno, reemplazando el único \ con \\, \\\ y \\\\. Mismo error.
Tenga en cuenta, sin embargo, que el error parece sugerir que el shell englobado en sí mismo está funcionando bien, porque 'predeterminado' está viendo el "(" y ")" sin escape correctamente. Y si el nombre/ruta del directorio no contiene paréntesis sino espacios en blanco, entonces un simple \-escape funciona bien (al igual que las comillas). Finalmente, observo que para los comandos de shell, como "mkdir", ya sea de paréntesis \-escape o entrecomillados, también funcionan:
$ mkdir dirname\(with\)parens
$ ls -ld dirname*
drwxr-xr-x 2 jonyive demigods 68 Oct 3 10:56 dirname(with)parens
Así que un probable sospechoso es defaults
él mismo. man defaults
no ofrece mucho, solo dice que solo dice que "el valor debe ser una lista de propiedades y debe estar entre comillas simples" . E incluso eso es mentira. En la práctica, solo debe estar entre comillas simples si contiene algo raro, e incluso allí, si lo raro es un espacio en blanco, \-escaping servirá. Y, por supuesto, si lo original es parens, entonces ni siquiera las comillas simples parecen funcionar.
Entonces, ¿alguna idea? ¡Gracias!
PD: estoy al tanto y he usado soluciones alternativas. Por ejemplo, puedo crear un enlace simbólico no problemático al directorio real infestado de paréntesis y simplemente dar defaults
el enlace simbólico como el archivo <value>
. Pero realmente me gustaría llegar al fondo de esto.
Para escapar de los paréntesis con éxito en el comando predeterminado, debe usar comillas y, dentro de las comillas, comillas simples:
Ejemplo:
defaults write com.apple.screencapture location "'/Users/user/Desktop/(Screenshots)'"
tkp