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)"'
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.0 votes
@lhf Oui, j'aurais dû vérifier dans Terminal, qui fonctionne comme vous l'avez dit. Pas de chance dans iTerm2, cependant. Je devrais peut-être revenir en arrière...
0 votes
Comment cela peut-il dépendre de l'émulateur de terminal que vous utilisez ? Je viens de tester et
pwd | pbcopy
fonctionne bien dans iTerm2.0 votes
@lhf oui, piping pour copier, ça marche. Je n'ai pas réussi à expliquer le nœud du problème :
cd `pbpaste`
me donne un espace non souligné, et donc,cd
ne reconnaît pas le répertoire. Et, vous avez raison, l'émulateur de terminal n'a pas d'importance. Je ne sais pas à quoi je pensais tout à l'heure, car ça ne fonctionne pas mieux dans Terminal. Je n'ai pas dû mettre d'espace.0 votes
Grenwar, voir ma réponse ci-dessous. En bref, il suffit d'ajouter des guillemets :
cd "`pbpaste`"
0 votes
L'utilisation de guillemets simples pour les chaînes de caractères semble être la meilleure solution, je ne comprends pas pourquoi
echo \'$(pbpaste)\'
ne fonctionnerait pas.0 votes
Ok, j'ai une meilleure question, quelle est ta raison pour utiliser
pwd |pbcopy
? Je suis sûr à 98 % qu'il existe une meilleure solution.0 votes
Votre nom de question et la question ne sont pas les mêmes, j'ai répondu à la question "Est-il possible d'avoir bash échapper les espaces dans pwd ?" s'il vous plaît, soit éditer la question ou son nom.