dso*_*len 18 cd-command symlink
我发现自己需要经常在我的主文件夹中的几个目录中跳来跳去,并且厌倦了编写它们。我想要一种更快的方法,这在传统上是一个符号链接。
但是,我不想用几十个符号链接弄乱我的主目录。我可以创建一些~/links/
目录和杂波它与符号链接,但它仍然是丑陋的。此外,我可能想创建每天都会改变的符号链接(在 .bashrc 中定义)以跳转到当前目录。
有没有办法有效地为符号链接设置别名,创建一些将被识别为快速导航链接的东西,但当我执行ls
我的主目录时实际上不会出现,并且不会持续到当前会话之后?
Tho*_*key 18
Shell 别名具有您可以对其进行(某些)名称补全(通常绑定到tab)的功能。或者,您可以使用该CDPATH
功能,该功能“最近”(在过去 5-6 年内)已得到改进以支持名称补全。如果这对您有用,它的优点是您键入的内容是目录的实际名称,而不是它的助记符。
根据bash手册
CDPATH
用作cd
内置命令的搜索路径的以冒号分隔的目录列表。
进一步阅读:
Mar*_*art 16
对于您经常使用但不每天更改的目录,另一种选择是alias
在您的.bashrc
文件中包含几个命令:
alias cdo="cd /u01/app/oracle"
alias cdw="cd /var/www/html"
Run Code Online (Sandbox Code Playgroud)
一个朋友有大约 50 个;我有一把;快捷方便。只是
cdo
Run Code Online (Sandbox Code Playgroud)
将目录更改为 /u01/app/oracle
mat*_*tdm 14
您可以使用制表符补全。默认情况下,在许多 Linux 发行版上,bash 被设置为当您按下 [TAB] 键时,您会得到一个可能匹配项的列表,或者如果只有一个匹配项,则全部填写。对于 cd,这通常是当前工作目录的子目录列表。您可以覆盖它,但我建议改为创建别名,例如jd
“跳转目录”:
alias jd=cd
Run Code Online (Sandbox Code Playgroud)
然后,将您想要的“书签”定义为 jd 的补全。查看 bash 手册页以获取更多选项(包括从命令或函数动态自动生成结果),但最简单的方法只是一个单词列表,包括-W
:
完整 -W "/srv/www ~/tmp ~/work" jd
现在,输入jd
并点击 [TAB],您将看到您的“书签”。输入任何不明确的部分,然后按 [TAB] 完成。(在上面,~
s 扩展到我的主目录,所以第一个 [TAB] 给我一个/
,如果我w
再次点击[TAB],/srv/www
则填写。)
当然,把~/.bash_profile
它放进去让它持久化。
或者,我们可以将其提升到一个新的水平。创建一个目录~/.shortcuts
——以一个点开头,它会被隐藏,不会弄乱你漂亮干净的主目录——并用符号链接填充到你想要的目录。然后,把它放在你的 ~/.bash_profile 中:
_list_shortcuts()
{
COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd
Run Code Online (Sandbox Code Playgroud)
这在_list_shortcuts
构建名称列表的函数中定义了一个稍微复杂一点的完成,并使jd
be 成为一个函数而不是一个简单的别名,因为我们希望它的行为与cd
. 该-P
检举cd
使得解决符号链接,让一切都变得透明的魔法。您的快捷方式名称甚至不必与目标匹配。
所以:
$ ls -l ~/.shortcuts/
total 0
lrwxrwxrwx. 1 mattdm mattdm 16 Dec 17 19:44 tmp -> /home/mattdm/tmp
lrwxrwxrwx. 1 mattdm mattdm 17 Dec 17 19:44 WORK -> /home/mattdm/work
lrwxrwxrwx. 1 mattdm mattdm 8 Dec 17 19:44 www -> /srv/www
$ jd tmp
$ pwd
/home/mattdm/tmp
$ jd WORK
/home/mattdm/work
Run Code Online (Sandbox Code Playgroud)
而且,为了额外的花哨,jd
在没有任何参数的情况下执行时列出所有快捷方式:
jd()
{
if [[ -z "$1" ]]; then
(cd ~/.shortcuts; stat -c '%N' *)
else
cd -P ~/.shortcuts/$1
fi
}
Run Code Online (Sandbox Code Playgroud)
注意:我使用compgen -W $( cmd )
而不是compgen -C 'cmd'
因为后者对我不起作用,我不明白为什么。这可能是我自己的一个新问题。:)
我推荐pushd
和popd
。
当涉及多个目录时,我个人确实发现它们在进行开发工作/阅读源代码时很方便。
它们有效地实现了堆栈结构/LIFO,您可以在其中 PUSH 目录 ( pushd
),下一个 POP 目录命令 ( popd
) 会检索它。
所以,当在一个目录中时,你会这样做:
pushd .
Run Code Online (Sandbox Code Playgroud)
当您需要检索它时,您可以
popd
Run Code Online (Sandbox Code Playgroud)
您可以执行多个pushd
(s),并在popd
稍后执行相应的(s),以返回目录。
我会在这里留下一个链接。
http://www.eriwen.com/bash/pushd-and-popd/
归档时间: |
|
查看次数: |
3770 次 |
最近记录: |