É possível ter espaços de escape bash no pwd?

21

Eu gostaria de copiar o diretório atual para a área de transferência, algo como: pwd | pbcopy. No entanto, pwdnão escapa ao espaço, portanto, algo em "Suporte a aplicativos", por exemplo, não é copiado corretamente. Parece que não me lembro de sempre ser esse o caso, então eu poderia ter enganado alguma coisa. Usando o iTerm2.

Existe uma configuração do bash para escapar de tudo? tendo problemas para pesquisar, muitas perguntas / tópicos sobre Spaces.app ou esc.

Atual:

$ pwd
/Library/Application Support/Google Earth/

Preferido:

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

Postagens já vistas: Copiando o caminho do diretório atual para a área de transferência e Como cd para um diretório com um nome que contenha espaços no bash? , que não tratam disso. Eu teria feito um comentário no primeiro, mas não tenho os privilégios.

Greenwar
fonte
11
Duvido que a cópia esteja correta - o que você deseja é a pasta para lidar com espaços - em qual aplicativo você está colando?
User151019 de
Ótima pergunta. Em breve, você terá representantes suficientes para comentar. Bem vindo ao site!
bmike
11
pwd | pbcopyfunciona bem para mim no terminal. O Finder / Edit / Show Clipboard confirma que está tudo bem.
lhf 30/05
@lhf Sim, deveria ter verificado o Terminal, que funciona como você afirmou. Sem sorte no iTerm2, no entanto. Talvez eu devesse mudar de volta ... #
311 greenwar
Como isso depende do emulador de terminal que você está executando? Acabei de testar e pwd | pbcopyfunciona bem no iTerm2.
lhf 31/05

Respostas:

13

Este comando escapará dos espaços corretamente:

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

Você pode usar o alias usando algo com histórico, como cwdse não se importasse em redefinir um cwd diferente

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

Coloque o pipe no pbcopy, se quiser que ele funcione mais como o pwd e apenas imprima o caminho de escape.

Glenn Jackman
fonte
não funciona no mac
Macilias 14/04
11
Funciona no meu Mac.
21817 Jason Swett
5
pwd | sed 's/ /\\ /g'

Mas não tenho certeza se isso resolverá o seu problema. O pbcopy está copiando exatamente o que recebe no stdin.

Marca
fonte
Isso apenas escapará dos espaços, o que não é suficiente, mesmo que seja o que o OP usou como exemplo.
Old Pro
mas isso funciona na maioria dos casos o correto de Glenn não funcionou no meu mac, não há nenhuma saída em tudo
Macilias
Você também pode usá-lo como alias ao declarar uma função: function escapePWD () {pwd | sed 's / / \\ / g'; } e use isso para o alias: alias epwd = 'escapePWD'
Macilias 14/04
1

Não há uma maneira integrada de fazer com que pwdos caminhos de arquivo de saída sejam escapados, pois isso geralmente não é útil.

Não faz sentido para pwdou pbcopyestar adicionando barras invertidas ao que é copiado. Se você deseja copiar o caminho em um arquivo de texto ou publicação na Web, não deseja inserir uma barra invertida.

Provavelmente, o que você deseja fazer é criar um alias separado, como qwd, para imprimir a forma entre aspas do diretório atual, ou simplesmente escapar da saída de pbpaste, o que é tão fácil quanto colocá-lo entre aspas:

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

Observe que não são apenas os espaços que precisam escapar. Barras para frente e para trás, estrela, ponto de interrogação, e comercial, ponto-e-vírgula e outros caracteres também precisam escapar. O mais seguro é usar aspas duplas, como no exemplo, que funcionará mesmo que o caminho inclua aspas duplas.

Se você quiser ser perverso, faça com que o AppleScript cite o diretório atual para você:

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'

Caso contrário, concordo principalmente com Glenn, exceto que, como acima, alias o formulário citado para qwdnão interferir no normal pwd:

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