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
或者使用zsh
的print
内置:
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 的。
您还可以使用别名pwd
to/bin/pwd | sed "s|$HOME|~|"
在可能使用 的其他脚本中获得此行为pwd
。
答案4
您可以尝试将不需要的部分替换为sed
:
pwd | sed 's,^/data/users/me,~,'
甚至更好:
pwd | sed "s,^$HOME,~,"