Il comando Apri non apprezza i caratteri non di escape nemmeno tra virgolette?

2

Sono io o il comando open accetta solo caratteri di escape nei parametri?

Ha provato open "~/Library/Messages/Attachments/87/07/079C263B-0586-48C6-B721-3C6AABAC76DF/Messages Image(1020754653).jpeg"

che restituisce The file /Users/Kyro/Library/Messages/~/Library/Messages/Attachments/87/07/079C263B-0586-48C6-B721-3C6AABAC76DF/Messages Image(1020754653).jpeg does not exist.

Quando in realtà open /Users/Kyro/Library/Messages/Attachments/87/07/079C263B-0586-48C6-B721-3C6AABAC76DF/Messages\ Image\(1020754653\).jpeg funziona abbastanza bene.

Modifica: esecuzione di Mavericks qui.

    
posta Matthieu Riegler 03.11.2013 - 23:28
fonte

3 risposte

3

Non è open , è il fatto che ~ funziona solo quando non è tra virgolette. ~ non è in realtà parte di un percorso file standard, è un metacarattere di shell che la shell sostituisce in contesti in cui assomiglia all'inizio di un percorso (e le virgolette sopprimono questo). Ecco alcuni esempi:

$ echo ~
/Users/gordon
$ echo "~"
~
$ ls ~/Library
Accounts        Fonts Disabled      Printers
[...]
$ ls "~/Library"
ls: ~/Library: No such file or directory

Nota l'ultimo comando sopra: poiché ~ è racchiuso tra virgolette, non viene sostituito dal percorso della mia cartella home, e quindi ls solo tratta è come un normale nome file (che non accade esistere). La stessa cosa sta accadendo nel tuo comando open .

Dal momento che il file che stai tentando di aprire ha altri metacaratteri della shell nel suo nome, ciò che dovresti fare è citare parzialmente il percorso: lascia il ~ fuori dalle virgolette, ma assicurati che la parte del nome del file sia all'interno delle virgolette . Qualcosa del genere:

open ~/"Library/Messages/Attachments/87/07/079C263B-0586-48C6-B721-3C6AABAC76DF/Messages Image(1020754653).jpeg"
    
risposta data 04.11.2013 - 02:50
fonte
2

Bene, non ho letto correttamente l'output dell'errore.

open è un inferno di * .

Aggiunge la directory di lavoro prima del comando quando si usano le virgolette.

/Users/Kyro/Library/Messages/~/Library/Messages/ non ha alcun senso.

    
risposta data 04.11.2013 - 00:16
fonte
1

Come appendice alla risposta di @Gordon Davidson:

Dalla pagina di Bash Man :

ESPANSIONE

Expansion is performed on the command line after it has been split into words. There are seven kinds of expansion performed: brace expansion, tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, word splitting, and pathname expansion.

Espansione Tilde

If a word begins with an unquoted tilde character ('~'), all of the characters preceding the first unquoted slash (or all characters, if there is no unquoted slash) are considered a tilde-prefix. If none of the characters in the tilde-prefix are quoted, the characters in the tilde-prefix following the tilde are treated as a possible login name. If this login name is the null string, the tilde is replaced with the value of the shell parameter HOME. If HOME is unset, the home directory of the user executing the shell is substituted instead. Otherwise, the tilde-prefix is replaced with the home directory associated with the specified login name.

If the tilde-prefix is a ~+', the value of the shell variable PWD replaces the tilde-prefix. If the tilde-prefix is a~-', the value of the shell variable OLDPWD, if it is set, is substituted. If the characters following the tilde in the tilde-prefix consist of a number N, optionally prefixed by a +' or a-', the tilde-prefix is replaced with the corresponding element from the directory stack, as it would be displayed by the dirs builtin invoked with the tilde-prefix as an argument. If the characters following the tilde in the tilde-prefix consist of a number without a leading +' or -', '+' is assumed.

If the login name is invalid, or the tilde expansion fails, the word is unchanged.

Each variable assignment is checked for unquoted tilde-prefixes immediately following a : or the first =. In these cases, tilde expansion is also performed. Consequently, one may use file names with tildes in assignments to PATH, MAILPATH, and CDPATH, and the shell assigns the expanded value.

    
risposta data 04.11.2013 - 03:04
fonte

Leggi altre domande sui tag