¿Es posible tener espacios de escape bash en pwd?

21

Me gustaría copiar el directorio actual en el portapapeles, algo así como: pwd | pbcopy. Sin embargo, pwdno escapa del espacio, por lo que algo en "Soporte de aplicaciones", por ejemplo, no se copia correctamente. Parece que no recuerdo que este sea siempre el caso, así que podría haber bofado algo. Usando iTerm2.

¿Hay configuración de bash para escapar de todo? tiene problemas para buscar, demasiadas preguntas / temas sobre Spaces.app o esc.

Actual:

$ pwd
/Library/Application Support/Google Earth/

Privilegiado:

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

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

Greenwar
fuente
1
Dudo que la copia sea correcta, lo que quieres es la pasta para manejar espacios, ¿en qué aplicación estás pegando?
user151019
Gran pregunta Pronto tendrás suficiente representante para comentar. Bienvenido al sitio!
bmike
1
pwd | pbcopyfunciona bien para mí en la Terminal. Finder / Edit / Show Clipboard confirma que está bien.
lhf
@lhf Sí, debería haber registrado en la Terminal, que funciona como usted indicó. Sin embargo, no hubo suerte en iTerm2. Tal vez debería cambiar de nuevo ...
greenwar
¿Cómo puede esto depender del emulador de terminal que está ejecutando? Acabo de probar y pwd | pbcopyfunciona bien en iTerm2.
lhf

Respuestas:

13

Este comando escapará espacios correctamente:

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

Puedes usar un alias usando algo con historial como cwdsi no te importa redefinir un cwd diferente

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

Olvídese de la tubería a pbcopy si desea que funcione más como pwd e imprima la ruta de escape.

Glenn Jackman
fuente
no funciona en mac
Macilias
1
Funciona en mi Mac
Jason Swett
5
pwd | sed 's/ /\\ /g'

Pero no estoy seguro de que esto finalmente solucione su problema. pbcopy está copiando exactamente lo que recibe en stdin.

marca
fuente
Eso solo escapará a los espacios, lo que no es suficiente, aunque eso es lo que el OP usó como ejemplo.
Old Pro
pero esto funciona en la mayoría de los casos, el correcto de glenn no funcionó en mi mac, no hay salida en absoluto
Macilias
También puede usarlo como alias cuando declara una función: function escapePWD () {pwd | sed 's / / \\ / g'; } y use esto para alias: alias epwd = 'escapePWD'
Macilias
1

No hay una forma integrada de hacer que pwdlas rutas de salida de archivo escapen, ya que esto generalmente no es útil.

No tiene sentido pwdo pbcopyagregar 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 invertida en ella.

Probablemente, lo que desea 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 entre comillas dobles:

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 solo los espacios necesitan escapar. Las barras inclinadas hacia adelante y hacia atrás, la estrella, el signo de interrogación, el signo y el punto y coma, y ​​otros caracteres también necesitan escapar. 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, puede hacer que AppleScript le cite 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 mayormente de acuerdo con Glenn, excepto que, como se mencionó anteriormente, alias el formulario citado para qwdno interferir con lo normal pwd:

alias qwd='printf "%q\n" "$(pwd)"'
Viejo pro
fuente