使 pwd 结果以“~”表示?

使 pwd 结果以“~”表示?

pwd给我

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

有没有简单的方法获得

~/some/random/folder

pwd

答案1

如果您使用的是 bash,那么dirs内置函数具有所需的行为:

dirs +0
~/some/random/folder

(笔记+0, 不是-0.)

zsh

dirs
~/some/random/folder

准确地说,我们首先需要清除目录堆栈,否则dirs会打印所有内容:

dirs -c; dirs

或者使用zshprint内置:

print -rD $PWD

或者

print -P %~

(那一转迅速扩张在。%~in$PS1扩展到当前目录 with$HOME替换为~但也处理其他命名目录像其他用户的主目录或命名目录您自己定义的)。

答案2

您可以使用 Bash 变量子字符串替换功能:

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

答案3

使用sed

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

这个想法是使用不太可能出现在主目录路径中的任何字符作为sed正则表达式中的分隔符。在上面的示例中,我使用的是|.

这种技术的好处是它实际上是独立于 shell 的。

您还可以使用别名pwdto/bin/pwd | sed "s|$HOME|~|"在可能使用 的其他脚本中获得此行为pwd

答案4

您可以尝试将不需要的部分替换为sed

pwd | sed 's,^/data/users/me,~,'

甚至更好:

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

相关内容