TL;DR
Dans defaults write
, comment puis-je fournir une qui contient des parenthèses ; i.e. "round" brackets, "(" et ")" ?
Full Bhoona
Je suis en train d'utiliser defaults
pour rediriger les captures d'écran vers un répertoire spécifique. Je peux le faire correctement et l'ai fait de nombreuses fois par le passé, mais je rencontre un problème lorsque le répertoire cible contient des parenthèses dans son chemin. Ainsi, je fais quelque chose comme :
$ defaults write com.apple.screencapture location
et je reçois une erreur de forme :
Could not parse: . Essayez de le mettre entre guillemets simples.
Mais j'obtiens cela malgré avoir essayé tout ce qui suit (et beaucoup plus encore). Dans ces essais, supposez que le nom du répertoire (préexistant) en question est, littéralement, dirname(with)parens. Mes tentatives et réponses :
$ defaults write com.apple.screencapture location dirname\(with\)parens
Could not parse: dirname(with)parens. Essayez de le mettre entre guillemets simples.
$ defaults write com.apple.screencapture location 'dirname\(with\)parens'
Could not parse: dirname(with)parens. Essayez de le mettre entre guillemets simples.
Et j'ai répété chacun d'eux, trois fois chacun, en remplaçant le simple \ par \\, \\\, et \\\\. Même erreur.
Remarquez cependant que l'erreur semble suggérer que le globbing du shell fonctionne bien, car 'defaults' voit correctement les parenthèses non échappées "(" et ")". Et si le nom/répertoire contient non pas des parenthèses mais simplement des espaces, alors un simple échappement \- fonctionne bien (tout comme les guillemets). Enfin, je remarque que pour les commandes shell, comme "mkdir", soit l'échappement \- des parenthèses, soit les mettre entre guillemets, fonctionnent également :
$ mkdir dirname\(with\)parens
$ ls -ld dirname*
drwxr-xr-x 2 jonyive demigods 68 Oct 3 10:56 dirname(with)parens
Ainsi, un suspect probable est defaults
lui-même. man defaults
n'offre pas beaucoup, disant seulement que, "value must be a property list, and must be enclosed in single quotes". Et même cela est un mensonge. En pratique, il ne doit être entre guillemets simples que s'il contient quelque chose d'étrange, et même là, si l'étrangeté est un espace, l'échappement \- fera l'affaire. Et bien sûr, si l'étrangeté sont les parenthèses, alors même les guillemets simples ne semblent pas fonctionner.
Alors, des idées ? Merci !
P.S. Je suis conscient et ai utilisé des astuces. Par exemple, je peux créer un lien symbolique non problématique vers le répertoire réel infesté de parenthèses, et donner simplement le lien symbolique à defaults
comme le . Mais j'aimerais vraiment comprendre ce problème en profondeur.