Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

快速更改目录

Posted on 2025-01-08

使用命令行工作时的一个困难是在目录之间导航,特别是在具有长路径的位置之间。有多种方法可以缓解这种情况。最简单的方法之一是使用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只会在脚本运行时更改工作目录。可能有一些办法可以解决这个问题,但我不想花时间去弄清楚。

相关帖子

  • 在命令行设置理论
  • Windows 上的类 Unix shell
  • 如何避免 shell 脚本编写

快速更改目录后的文章首次出现在John D. Cook上。

原文: https://www.johndcook.com/blog/2025/01/07/qcd/

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Christopher Butler
  • Colin Percival
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Dustin Curtis
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Liz Danzico
  • Lou Plummer
  • Luke Wroblewski
  • Matt Baer
  • Matt Stoller
  • Matthias Endler
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Rohit Patel
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • Sam Rose
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • thesephist
  • Thinking Deep & Wide
  • Tim Kellogg
  • Understanding AI
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme