E 'possibile avere spazi di escape di bash in pwd?

19

Mi piacerebbe copiare la directory corrente negli appunti, qualcosa del tipo: pwd | pbcopy . Tuttavia, pwd non sfugge allo spazio, quindi qualcosa in "Application Support", ad esempio, non viene copiato correttamente. Non mi sembra di ricordare che sia sempre così, quindi avrei potuto fare qualcosa. Utilizzando iTerm2.

Ci sono impostazioni bash per sfuggire a tutto? avendo problemi di ricerca, troppe domande / argomenti su Spaces.app o esc .

corrente:

$ pwd
/Library/Application Support/Google Earth/

preferita:

$ pwd
/Library/Application\ Support/Google\ Earth/

Post già visti: Copia corrente il percorso della directory negli appunti e Come effettuare il cd in una directory con un nome contenente spazi in bash? , che non risolvono questo problema. Avrei fatto un commento nel primo, ma non ho i privilegi.

    
posta greenwar 30.05.2012 - 20:14
fonte

3 risposte

12

Questo comando uscirà correttamente dagli spazi:

printf "%q\n" "$(pwd)" | pbcopy

Puoi creare un alias usando qualcosa con la cronologia come cwd se non ti dispiace ri-definire un diverso cwd

alias cwd='printf "%q\n" "$(pwd)" | pbcopy'

Lascia la pipa su pbcopy se vuoi che funzioni più come pwd e stampi semplicemente il percorso di escape.

    
risposta data 31.05.2012 - 00:41
fonte
3
pwd | sed 's/ /\ /g'

Ma non sono sicuro che questo alla fine risolverà il problema. pbcopy sta copiando esattamente ciò che riceve su stdin.

    
risposta data 30.05.2012 - 20:49
fonte
1

Non esiste un modo integrato per rendere pwd i percorsi dei file di escape, poiché generalmente non è utile.

Non ha senso che pwd o pbcopy aggiungano barre inverse a ciò che viene copiato. Se si desidera copiare il percorso in un file di testo o un post Web, non si desidera inserire una barra rovesciata in esso.

Probabilmente ciò che vuoi fare è creare un alias separato, come qwd , per stampare il modulo quotato della directory corrente, o semplicemente sfuggire all'output di pbpaste , che è facile come metterlo in doppio- cita:

bash-3.2$ pwd
/Users/user
bash-3.2$ cd test\ dir/untitled\ \"folder/
bash-3.2$ pwd
/Users/user/test dir/untitled "folder
bash-3.2$ pwd | pbcopy
bash-3.2$ echo "'pbpaste'"
/Users/user/test dir/untitled "folder
bash-3.2$ cd
bash-3.2$ pwd
/Users/user
bash-3.2$ cd 'pbpaste'
bash: cd: /Users/user/test: No such file or directory
bash-3.2$ cd "'pbpaste'"
bash-3.2$ pwd
/Users/user/test dir/untitled "folder

Tieni presente che non sono solo gli spazi che necessitano di essere sfuggiti. Le barre in avanti e indietro, le stelle, i punti interrogativi, la e commerciale, i punti e altri caratteri devono essere sfuggiti, pure. Safest è solo per usare virgolette come nell'esempio, che funzionerà anche se il percorso include doppi apici in esso.

Se vuoi essere perverso al riguardo, potresti fare in modo che AppleScript indichi la directory corrente per te:

bash-3.2$ alias qwd="osascript -e 'return quoted form of POSIX path of (POSIX file \"./\" as alias)'"
bash-3.2$ qwd
'/Users/user/test dir/untitled "folder'

Altrimenti sono per lo più d'accordo con Glenn, ad eccezione del fatto che, come sopra, farei l'alias del form quotato a qwd in modo da non interferire con il normale pwd :

alias qwd='printf "%q\n" "$(pwd)"'
    
risposta data 31.05.2012 - 04:14
fonte

Leggi altre domande sui tag