【发布时间】:2013-12-20 02:54:08
【问题描述】:
我有一个小命令行工具的想法,希望它能让我更快地浏览目录,我需要知道如果给定一个来自
例如,假设我在某处的某个目录中有以下目录:
dir1 directory_2 test testing tested experiments
测试中包含的是目录
fully_tested partially_tested
然后调用脚本将首先列出我调用的所有目录 cd-able 并等待输入。如果我输入的第一个字符是“t”,我想自动将“est”注入 STDIN(因为“test”在 test、testing 和tested 的联合中),列出所有以“test”开头的目录并等待进一步输入。
如果下一个字符是 'e' 或 'i' 它会自动 cd 分别进入测试或测试(因为这些目录是唯一确定的),如果它是一些尚未确定的“容易到达的关键”,比如* 我会 cd 进入测试,点击 '.'会做一个 cd ..,并且点击任何其他字母字符都没有效果(也许其他一些容易到达的键可能会列出所有内容)。
回到示例,输入字符 'tef' 意味着我将 cd 进入 testing/fully_tested(因为 'te' 唯一匹配 testing 而 'f' 唯一匹配 fully_tested)
至于实际编码,我希望它是我自己的问题(我相信可以逐个字符地处理输入)所以重申一下,我在这里要问的是:
perl 是否提供了某种机制,通过该机制可以在没有用户交互的情况下修改 STDIN(这样我可以在命令行上模拟 tab-expand,但这种扩展发生在幕后)?或者换句话说,在评估最后一个输入时,我想静默地进行选项卡扩展(根据命令行,它对我的输入流“看起来像一个选项卡扩展”)而不显式点击
更多细节:据我所知,我目前正在做什么,一旦编码完成,在运行时会如下所示(假设我的主目录有文件夹桌面、文档、Documents_bak、下载、音乐)
Desktop/ Documents/ Documents_bak/ Downloads/ Music
D
Desktop/ Documents/ Documents_bak/ Downloads
o
Documents/ Documents_bak/ Downloads
c
Documents/ Documents_bak
_
programming/ books/ ...(other directories)
这看起来不太好......我真正想要的是类似的东西
Desktop/ Documents/ Documents_bak/ Downloads/ Music
D
Desktop/ Documents/ Documents_bak/ Downloads
Do
Documents/ Documents_bak/ Downloads
Documents
Documents/ Documents_bak
Documents_bak/
programming/ books/ ...(other directories)
Documents_bak/
最后一行“Documents_bak/”实际上是输入流,就好像我已经全部输入了一样(所以如果我愿意,我可以删除其中的一些)。只是如何实现这一点 这给我带来了问题
编辑* 我不是(据我所知)试图在这里重新发明轮子——我只是想在更改目录时删除
【问题讨论】:
-
所以你想在 perl 中重新创建 bash 等已经在做什么?
-
不是真的...我还没有看到如何在 bash 中获得此功能。确实将选项卡视为一个键我怎么能遍历,比如 10 个目录只需 10 次击键(没有当然是一堆别名)?
-
给定
abc/def/ghi,a[tab]/b[tab]/c[tab]会得到你想要的,你的应用程序如何区分abc/和abcdef/的目录?应该选择哪一个? -
假设 'a' 唯一地扩展到一个目录,我想立即去那里,而不需要
和 步骤。另一方面,关于你的问题(我相信我在我的问题中承认了这一点),如果不是,它会在 abc 等我,如果我点击 d it cds 到 abcdef,如果我点击,说 * it cds进入 abc
标签: perl