Come gestisco i parenti (ad esempio l'escape corretto) in un valore di chiave 'write default ...'?

2

TL; DR

In defaults write <domain> <key> <value> , come posso fornire un <value> che contiene parens; vale a dire "round" parentesi, "(" e ")"?

Bhoona completo

Sto utilizzando defaults per reindirizzare le acquisizioni dello schermo in una directory specifica. Che posso fare bene, e avere molte volte in passato, ma sto incontrando un problema quando la directory di destinazione ha parentesi nel suo percorso. Quindi sto facendo qualcosa del tipo:

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

e sto ricevendo un errore nel modulo:

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

Ma lo capisco nonostante provi tutto quanto segue (e un po 'di più oltre). In questo, si supponga che il nome della directory (preesistente) in questione sia, letteralmente, dirname (con) parens. I miei tentativi e risposte:

$ 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.

E ho ripetuto entrambi, tre volte ciascuno, sostituendo il singolo \ con \\, \\\, e \\\\. Stesso errore.

Si noti comunque che l'errore sembra suggerire che la shell che si sta globbing stia funzionando bene, perché 'default' sta vedendo correttamente "(" e ")" senza caratteri di escape. E se il nome / percorso della directory non contiene parens, ma piuttosto spazi, allora un semplice \ -escape funziona bene (come fa il quoting). Infine, osservo che per i comandi di shell, come "mkdir", anche quelli di \ -escaping parens, o citandoli, funzionano anche:

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

Quindi un probabile sospetto è defaults stesso. man defaults non offre molto, dicendo solo che dice solo che, "il valore deve essere un elenco di proprietà e deve essere racchiuso tra virgolette singole" . E anche quella è una bugia. In pratica, solo deve essere tra virgolette singole se contiene qualcosa di funky, e anche lì, se la funkiness è uno spazio bianco, \ -escaping lo farà. E, naturalmente, se il funkiness è parens, allora neanche il singolo quoting sembra funzionare.

Quindi, qualche idea? Grazie!

P.S. Sono a conoscenza e ho usato soluzioni alternative. Ad esempio, posso creare un link simbolico non fastidioso alla directory effettiva infestata da parents, e dare appena defaults al link simbolico come <value> . Ma mi piacerebbe davvero arrivare a fondo.

    
posta tkp 03.10.2017 - 18:13
fonte

1 risposta

3

Per sfuggire con successo il paren nel comando defaults devi usare le virgolette e tra virgolette tra virgolette:

Esempio:

defaults write com.apple.screencapture location "'/Users/user/Desktop/(Screenshots)'"
    
risposta data 03.10.2017 - 19:00
fonte

Leggi altre domande sui tag