È possibile avere spazi di escape bash in pwd?


21

Mi piacerebbe copiare la directory corrente negli appunti, qualcosa come: pwd | pbcopy. Tuttavia, pwdnon sfugge allo spazio, quindi qualcosa in "Supporto applicazione", ad esempio, non viene copiato correttamente. Non mi sembra di ricordare che sia sempre stato così, quindi avrei potuto dare una scossa a qualcosa. Utilizzando iTerm2.

Esistono impostazioni bash per sfuggire a tutto? problemi nella ricerca, troppe domande / argomenti su Spaces.app o esc.

Attuale:

$ pwd
/Library/Application Support/Google Earth/

preferita:

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

Post già visti: copiare il percorso della directory corrente negli appunti e come eseguire 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.


1
Dubito che la copia sia corretta - quello che vuoi è l'incolla per gestire gli spazi - in quale app stai incollando?
user151019

Ottima domanda Presto avrai un rappresentante sufficiente per commentare. Benvenuti nel sito!
bmike

1
pwd | pbcopyfunziona bene per me in Terminal. Finder / Modifica / Mostra Appunti conferma che è ok.
partire

@lhf Sì, avrebbe dovuto effettuare il check-in nel Terminale, che funziona come indicato. Nessuna fortuna in iTerm2, però. Forse dovrei tornare indietro ...
Greenwar,

Come può dipendere dall'emulatore di terminale che stai utilizzando? Ho appena testato e pwd | pbcopyfunziona benissimo in iTerm2.
LHF

Risposte:


13

Questo comando sfuggirà correttamente agli spazi:

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

Puoi alias usando qualcosa con la storia come cwdse non ti dispiaccia ridefinire un diverso CWD

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

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


non funziona su Mac
Macilias,

1
Funziona sul mio Mac.
Jason Swett,

5
pwd | sed 's/ /\\ /g'

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


Ciò sfuggirà solo agli spazi, il che non è abbastanza, anche se questo è ciò che l'OP ha usato come esempio.
Old Pro

ma questo funziona nella maggior parte dei casi quello corretto di Glenn non ha funzionato sul mio mac, non c'è nessun output
Macilias

Puoi anche usarlo come alias quando dichiari una funzione: function escapePWD () {pwd | sed 's / / \\ / g'; } e usalo per alias: alias epwd = 'escapePWD'
Macilias,

1

Non esiste un modo integrato per creare pwdpercorsi di file con escape di output, in quanto ciò non è generalmente utile.

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

Probabilmente quello che vuoi fare è creare un alias separato, come qwd, per stampare il modulo citato della directory corrente, o semplicemente sfuggire all'output di pbpaste, che è facile come metterlo tra virgolette doppie:

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

Nota che non sono solo gli spazi a dover essere salvati. Anche le barre in avanti e all'indietro, la stella, il punto interrogativo, la e commerciale, i punti e virgola e altri caratteri devono fuggire. Il modo più sicuro è usare solo virgolette come nell'esempio, che funzionerà anche se il percorso include virgolette doppie.

Se vuoi essere perverso, puoi fare in modo che AppleScript citi 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 concordo principalmente con Glenn, tranne, come sopra, alias il modulo citato per qwdnon interferire con il normale pwd:

alias qwd='printf "%q\n" "$(pwd)"'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.