使用命令行工作时的一个困难是在目录之间导航,特别是在具有长路径的位置之间。有多种方法可以缓解这种情况。最简单的方法之一是使用cd -
返回上一个目录。另一种是使用pushd
和popd
。还有一个方法是设置CDPATH
变量。
量子色散功能
这篇文章提出了另一种方法,可以用来代替上述方法或作为上述方法的补充。 Daniel Barrett 所著的 Efficient Linux at the Command Line 一书包含一个名为qcd
(快速更改目录)的函数,该函数将cd
到任何常用目录列表。该函数本质上是一个大的 case 语句,获取一个键并转到相应的目录。
量子cd () { 案例“$1” 工作) cd $HOME/工作/项目/Web/src/include ;; 食谱) cd $HOME/家庭/烹饪/食谱 ;; …… 埃萨克 密码 }
因此,例如, qcd work
将带您到目录~/…/include
。
Barrett 在qcd
函数的定义之后又添加了一行:
完整-W“工作食谱……”qcd
这将使用 bash 内置函数complete
为脚本打开制表符补全功能。当您在 shell 实用程序中使用制表符补全时,可以隐式使用此函数。您可以像上面那样调用它,将相同的命令完成添加到您自己的函数中。因此,例如,使用上面的代码,用户可以输入
量子点TAB
而不是cd work
。
改进
书中说“将函数存储在 shell 配置文件中,例如$HOME/.bashrc
…获取它,然后就可以运行了。”我想就此发表两点评论。
首先,重要的是qcd
是一个函数而不是一个脚本。脚本在子 shell 中运行,因此在脚本中运行cd
命令会在脚本运行时更改您的工作目录。但是,当脚本完成时,子 shell 退出,并且工作目录与运行脚本之前一样。
其次,如果您使用此功能,当您想到要添加的新目录时,您将经常编辑它。由于这个原因,我宁愿不将其放入我的.bashrc
文件中。另外,也许我想在 Linux 机器上的 bash shell 和 Mac 上的 zshell 中使用它。因此,我没有将qcd
的定义放在.bashrc
文件中,而是将其放在文件qcd.sh
中,并从.bashrc
文件中获取该文件。
当您将新的键和目录添加到qcd
脚本时,您还需要将键添加到complete
的调用中,否则您将陷入制表符补全仅适用于某些目录但不适用于其他目录的尴尬境地。可以编写一个更高级的 shell 脚本来解决这个问题。
生成量子色散
我对 shell 脚本的了解很少,我希望保持这种状态。如果我需要做一些复杂的事情,我不会在 shell 脚本中完成。因此,我编写了一个 Python 脚本来从键和目录的字典生成qcd.sh
文件。精通 shell 脚本的人会发现这不必要地复杂。每个人都有自己的。
顺便说一下,如果你要写一个Python脚本,为什么不直接写一个Python脚本就可以了,而不是写一个Python脚本来生成shell脚本呢?出于同样的原因, qcd
是一个函数:Python 脚本中的cd
只会在脚本运行时更改工作目录。可能有一些办法可以解决这个问题,但我不想花时间去弄清楚。
相关帖子
快速更改目录后的文章首次出现在John D. Cook上。