¿Es posible tener espacios de escape de bash en pwd?

19

Me gustaría copiar el directorio actual al portapapeles, algo así como: pwd | pbcopy . Sin embargo, pwd no escapa al espacio, por lo que algo en "Application Support", por ejemplo, no se copia correctamente. Parece que no recuerdo que este sea siempre el caso, así que podría haberle quitado algo. Utilizando iTerm2.

¿Hay ajustes de bash para escapar de todo? problemas para realizar búsquedas, demasiadas preguntas / temas sobre Spaces.app o esc .

Actual:

$ pwd
/Library/Application Support/Google Earth/

Preferido:

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

Publicaciones ya vistas: Copiando el actual la ruta del directorio al portapapeles y ¿Cómo copiar a un directorio con un nombre que contiene espacios en bash? , que no aborda esto. Hubiera hecho un comentario en el primero, pero no tengo los privilegios.

    
pregunta greenwar 30.05.2012 - 20:14

3 respuestas

12

Este comando escapará espacios correctamente:

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

Puedes usar un alias con algo como el historial cwd si no te importa redefinir un diferente cwd

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

Abandona la tubería a pbcopy si quieres que funcione más como pwd y simplemente imprime la ruta de escape.

    
respondido por el glenn jackman 31.05.2012 - 00:41
3
pwd | sed 's/ /\ /g'

Pero no estoy seguro de que esto solucione su problema. pbcopy está copiando exactamente lo que recibe en la entrada estándar.

    
respondido por el Mark 30.05.2012 - 20:49
1

No hay una forma integrada de hacer que pwd produzca rutas de archivos de escape, ya que esto generalmente no es útil.

No tiene sentido que pwd o pbcopy esté agregando barras invertidas a lo que se copia. Si desea copiar la ruta en un archivo de texto o publicación web, no querrá insertar una barra diagonal inversa en él.

Probablemente, lo que quieres hacer es crear un alias separado, como qwd , para imprimir la forma citada del directorio actual, o simplemente escapar de la salida de pbpaste , que es tan fácil como ponerlo en doble citas:

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

Tenga en cuenta que no son solo los espacios los que necesitan escapar. Las barras hacia adelante y hacia atrás, la estrella, el signo de interrogación, el símbolo comercial, el punto y coma y otros caracteres deben escapar también. Lo más seguro es usar comillas dobles como en el ejemplo, que funcionará incluso si la ruta incluye comillas dobles.

Si quiere ser perverso al respecto, podría hacer que AppleScript le indique el directorio actual:

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'

De lo contrario, estoy más de acuerdo con Glenn, excepto que, como se mencionó anteriormente, alias la forma citada como qwd para no interferir con el pwd normal:

alias qwd='printf "%q\n" "$(pwd)"'
    
respondido por el Old Pro 31.05.2012 - 04:14

Lea otras preguntas en las etiquetas