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)"'
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.0 votos
@lhf Sí, debería haberlo comprobado en el Terminal, que funciona tal y como indicas. Sin embargo, no hubo suerte en iTerm2. Tal vez debería volver a cambiar...
0 votos
¿Cómo puede depender esto del emulador de terminal que estés ejecutando? Acabo de probar y
pwd | pbcopy
funciona bien en iTerm2.0 votos
@lhf sí, la tubería para copiar, funciona. Me faltó explicar el quid del problema:
cd `pbpaste`
me da un espacio sin tapar, y por lo tanto,cd
no reconoce el directorio. Y, tienes razón, no importa el emulador de terminal. No sé en qué estaba pensando antes, porque no funciona mejor en Terminal. Debe ser que no tenía un espacio.0 votos
Grenwar, ver mi respuesta abajo. En resumen, sólo hay que añadir comillas dobles:
cd "`pbpaste`"
0 votos
El uso de comillas simples para los literales de cadena parece la mejor solución, no entiendo por qué
echo \'$(pbpaste)\'
no funcionaría.0 votos
Ok, tengo una pregunta mejor, ¿cuál es su razón para usar
pwd |pbcopy
? Estoy seguro al 98% de que hay una solución mejor.0 votos
El nombre de tu pregunta y la pregunta no son iguales, yo respondí a la pregunta "¿Es posible tener espacios de escape de bash en pwd?" por favor, edita la pregunta o su nombre.