29 votes

Est-il possible de faire en sorte que bash échappe les espaces dans le pwd ?

Je voudrais copier le répertoire actuel dans le presse-papiers, quelque chose comme : pwd | pbcopy . Cependant, pwd n'échappe pas l'espace, de sorte que quelque chose dans "Application Support", par exemple, ne se copie pas correctement. Je ne me souviens pas que cela ait toujours été le cas, donc j'ai pu me tromper. J'utilise iTerm2.

Y a-t-il un paramètre bash pour échapper à tout ? J'ai du mal à chercher, trop de questions/sujets concernant Spaces.app ou esc .

Actuel :

$ pwd
/Library/Application Support/Google Earth/

Préféré :

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

Postes déjà vus : Copie du chemin d'accès du répertoire courant dans le presse-papiers y Comment cd vers un répertoire dont le nom contient des espaces en bash ? qui n'abordent pas cette question. J'aurais bien fait un commentaire dans le premier, mais je n'en ai pas les privilèges.

1 votes

Je doute que le copier soit correct - ce que vous voulez c'est que le coller gère les espaces - dans quelle application collez-vous ?

0 votes

Excellente question. Vous aurez bientôt une réputation suffisante pour commenter. Bienvenue sur le site !

1 votes

pwd | pbcopy fonctionne bien pour moi dans le Terminal. Finder/Edit/Show Clipboard confirme que c'est correct.

22voto

glenn jackman Points 1869

Cette commande permet d'échapper correctement aux espaces :

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

Vous pouvez l'aliaser en utilisant quelque chose avec une histoire comme cwd si cela ne vous dérange pas de redéfinir une différent cwd

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

Laissez tomber le pipe de pbcopy si vous voulez qu'il fonctionne plus comme pwd et qu'il affiche simplement le chemin échappé.


Ou, pour imprimer le pwd tout en le copiant dans le presse-papiers, utilisez tee et une substitution du processus de sortie :

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

1 votes

Ne fonctionne pas sur le mac

1 votes

Fonctionne sur mon Mac.

5voto

Derek Points 41
pwd | sed 's/ /\\ /g'

Mais je ne suis pas sûr que cela va résoudre votre problème. pbcopy copie exactement ce qu'il reçoit sur stdin.

0 votes

Cela ne permettra d'échapper qu'aux espaces, ce qui est loin d'être suffisant, même si c'est ce que le PO a utilisé comme exemple.

0 votes

Mais cela fonctionne dans la plupart des cas, la bonne méthode de Glenn n'a pas fonctionné sur mon Mac, il n'y a pas de sortie du tout.

1 votes

Vous pouvez également l'utiliser comme alias lorsque vous déclarez une fonction : function escapePWD() { pwd | sed 's/ / / \\ /g' ; } et utilisez ceci pour l'alias : alias epwd='escapePWD'.

1voto

Old Pro Points 5634

Il n'y a pas de moyen intégré de faire pwd la sortie des chemins de fichiers échappés, car cela n'est généralement pas utile.

Il n'est pas logique que pwd o pbcopy pour ajouter des backslashes à ce qui est copié. Si vous vouliez copier le chemin d'accès dans un fichier texte ou un message Web, vous ne voudriez pas qu'une barre oblique inverse y soit insérée.

Ce que vous voulez probablement faire, c'est créer un alias séparé, comme par exemple qwd pour imprimer la forme citée du répertoire actuel, ou simplement échapper à la sortie de la commande pbpaste ce qui est aussi simple que de le mettre entre guillemets :

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

Notez que les espaces ne sont pas les seuls à devoir être échappés. Les barres obliques avant et arrière, l'étoile, le point d'interrogation, l'esperluette, le point-virgule et d'autres caractères doivent également être échappés. Le plus sûr est d'utiliser des guillemets doubles comme dans l'exemple, ce qui fonctionnera même si le chemin contient des guillemets doubles.

Si vous voulez être pervers, vous pouvez faire en sorte qu'AppleScript cite le répertoire courant pour vous :

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'

Sinon, je suis plutôt d'accord avec Glenn, sauf que, comme ci-dessus, j'aliaserais la forme citée en qwd de manière à ne pas interférer avec le fonctionnement normal pwd :

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X