29 votos

¿Es posible tener espacios de escape bash en pwd?

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 "Apoyo a la aplicación", por ejemplo, no se copia correctamente. No recuerdo que esto sea siempre así, así que podría haberme equivocado en algo. Usando iTerm2.

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

Actual:

$ pwd
/Library/Application Support/Google Earth/

Preferido:

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

Puestos ya vistos: Copiar la ruta del directorio actual en el portapapeles y ¿Cómo se puede ir a un directorio con un nombre que contiene espacios en bash? que no abordan este tema. Habría hecho un comentario en la primera, pero no tengo los privilegios.

1 votos

Dudo que el copiado sea correcto - lo que quieres es que el pegado se ocupe de los espacios - ¿en qué aplicación estás pegando?

0 votos

Gran pregunta. Pronto tendrás la suficiente reputación para comentar. Bienvenido al sitio.

1 votos

pwd | pbcopy me funciona bien en la Terminal. Finder/Edición/Mostrar Portapapeles confirma que está bien.

22voto

Mark Puntos 6

Este comando escapará los espacios correctamente:

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

Puedes ponerle un alias con historia como cwd si no te importa redefinir un diferentes cwd

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

Deshazte de la tubería a pbcopy si quieres que funcione más como pwd y sólo imprime la ruta escapada.


O bien, para imprimir el pwd y al mismo tiempo copiarlo en el portapapeles, utilice tee y una sustitución del proceso de salida:

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

1 votos

No funciona en mac

1 votos

Funciona en mi Mac.

5voto

Derek Puntos 21
pwd | sed 's/ /\\ /g'

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

0 votos

Eso sólo escapará a los espacios, lo que no es suficiente, aunque es lo que el OP utilizó como ejemplo.

0 votos

Pero esto funciona en la mayoría de los casos el adecuado de glenn no funcionó en mi mac, no hay salida en absoluto

1 votos

También puede utilizarlo como alias cuando declare una función: function escapePWD() { pwd | sed 's/ / \\ /g'; } y utiliza esto para el alias: alias epwd='escapePWD'

1voto

Old Pro Puntos 2851

No hay una forma integrada de hacer pwd salida de rutas de archivos escapados, ya que generalmente no es útil.

No tiene sentido que pwd o pbcopy para añadir barras invertidas a lo que se copia. Si quisiera copiar la ruta en un archivo de texto o en una entrada web, no querría una barra invertida insertada en ella.

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 , lo cual 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 sólo hay que escapar los espacios. Las barras inclinadas hacia delante y hacia atrás, el asterisco, el signo de interrogación, el ampersand, el punto y coma y otros caracteres también deben escaparse. Lo más seguro es utilizar comillas dobles como en el ejemplo, que funcionará incluso si la ruta incluye comillas dobles.

Si quieres ser perverso al respecto, puedes hacer que AppleScript cite el directorio actual por ti:

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'

Por lo demás, estoy de acuerdo en su mayor parte con Glenn, salvo que, como en el caso anterior, yo pondría el alias de la forma citada en qwd para no interferir con el normal pwd :

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X