¿Es posible tener espacios de escape bash en pwd?

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

¿Hay una configuración 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: Copiar 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. Habría hecho un comentario en el primero, pero no tengo los privilegios.

Dudo que la copia sea correcta, lo que quieres es pegar para tratar con espacios, ¿en qué aplicación estás pegando?
Gran pregunta. Pronto tendrás suficientes representantes para comentar. Bienvenido al sitio!
pwd | pbcopyfunciona bien para mí en la Terminal. Finder/Edit/Show Clipboard confirma que está bien.
@lhf Sí, debería haber verificado en la Terminal, que funciona como usted indicó. Sin embargo, no hubo suerte en iTerm2. Tal vez debería volver a cambiar...
¿Cómo puede depender esto del emulador de terminal que está ejecutando? Acabo de probar y pwd | pbcopyfunciona bien en iTerm2.
@lhf sí, tubería para copiar, funciona. No pude explicar el quid del problema: cd `pbpaste`me da un espacio sin escapar y, por lo tanto, cdno reconoce el directorio. Y, tienes razón, da igual el emulador de terminal. No sé en qué estaba pensando antes, porque no funciona mejor en Terminal. No debe haber tenido un espacio.
Grenwar, mira mi respuesta a continuación. En resumen, solo agregue comillas dobles:cd "`pbpaste`"
Usar comillas simples para literales de cadena parece ser la mejor solución, no entiendo por qué echo \'$(pbpaste)\'no funcionaría.
Ok, tengo una mejor pregunta, ¿cuál es tu razón para usar pwd |pbcopy? Estoy alrededor del 98% seguro de que hay una solución mejor.
el nombre de su pregunta y la pregunta no son iguales, respondí la pregunta "¿Es posible tener espacios de escape bash en pwd?" por favor, edite la pregunta o su nombre.

Respuestas (3)

Este comando escapará los espacios correctamente:

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

Puede alias usando algo con historial como cwdsi no le importa volver a definir un cwd diferente

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

Deshágase de la tubería a pbcopy si desea que funcione más como pwd y simplemente imprima la ruta de escape.


O bien, para imprimir el pwd mientras lo copia al portapapeles, use teeuna sustitución del proceso de salida:

alias cwd='printf "%q\n" "$(pwd)" | tee >(pbcopy)'
no funciona en mac
Funciona en mi Mac.
pwd | sed 's/ /\\ /g'

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

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

No hay una forma integrada de pwdgenerar rutas de archivo con escape de salida, ya que esto generalmente no es útil.

No tiene sentido que se agreguen barras invertidas pwda pbcopylo que se copia. Si desea copiar la ruta en un archivo de texto o una publicación web, no querrá que se inserte una barra invertida en él.

Probablemente lo que quiera 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 son solo los espacios los que necesitan escapar. Las barras diagonales hacia adelante y hacia atrás, la estrella, el signo de interrogación, el ampersand, el punto y coma y otros caracteres también deben escaparse. Lo más seguro es usar comillas dobles como en el ejemplo, lo que funcionará incluso si la ruta incluye comillas dobles.

Si quiere ser perverso al respecto, puede hacer que AppleScript cite el directorio actual por usted:

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 indicó anteriormente, le daría un alias a la forma citada para qwdno interferir con lo normal pwd:

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