web-dev-qa-db-fra.com

Faire un résultat de PWD en termes de "~"?

pwd me donne

/data/users/me/some/random/folder

Y a-t-il un moyen facile d'obtenir

~/some/random/folder

de pwd?

30
Sibbs Gambling

Si vous utilisez Bash, alors le dirs intégré a le comportement souhaité:

dirs +0
~/some/random/folder

(Noter +0, ne pas -0 .)

Avec zsh:

dirs
~/some/random/folder

Pour être exactement, nous avons d'abord besoin d'effacer la pile d'annuaires, sinon dirs imprimerait tous les contenus:

dirs -c; dirs

Ou avec zsh 's print intégré:

print -rD $PWD

ou

print -P %~

(celui-ci tourne expansion rapide sur. %~ dans $PS1 Développe au répertoire actuel avec $HOME remplacé par ~ mais gère également autre nommé répertoires comme le répertoire de base d'autres utilisateurs ou annuaires que vous vous définissez).

29
chaos

Vous pouvez utiliser la fonctionnalité de remplacement de la sous-chaîne de la variable Bash:

$ pwd
/home/vagrant/foo/bar
$ echo ${PWD/#$HOME/'~'}
~/foo/bar
20
Nykakin

En utilisant sed:

pwd | sed "s|^$HOME|~|"

L'idée est d'utiliser n'importe quel caractère moins susceptible d'apparaître dans un chemin de répertoire de maison comme délimiteur dans sed regex. Dans l'exemple ci-dessus, j'utilise |.

La bonne chose à propos de cette technique est qu'elle est en fait indépendante de Shell.

Vous pouvez également alias pwd à /bin/pwd | sed "s|$HOME|~|" Pour obtenir ce comportement dans d'autres scripts qui pourraient utiliser pwd.

7
Bichoy