Raf*_*ffi 4 bash zsh grep command-line
我经常发现在使用命令行时,我需要复制最后一个命令的输出中出现的路径。例如我可能会find . | grep
这样使用:
[user@localhost /tmp]$ find . | grep B
./directoryAB
./directoryBA
./directoryBB
./directoryBC
./directoryCB
Run Code Online (Sandbox Code Playgroud)
此时我需要拿起鼠标,复制我想要的路径,然后输入cd
,然后粘贴。但如果我可以循环输出中的路径并仅使用键盘复制我想要的路径,那就太棒了。有什么可以帮助我做到这一点吗?
我使用 zsh 和 iTerm2,fwiw。
使用直接与生成输出的程序一起使用的工具来实现这一点更容易,而不是试图从已经打印的内容中刮取它。
有些工具可以显示交互式“选择项目”或“选择文件”提示,并设计为将其作为命令反馈到 shell 中。fzf
和broot
是两个例子。
fzf
可以通过 stdin 接受任何输入,并让您交互式地过滤它,例如:
cd "$(find -type d | fzf)"
Run Code Online (Sandbox Code Playgroud)
这可以封装在 shell 函数中,或用作增强的 Tab-complete(fzf 中包含此功能的 Bash 代码),甚至绑定到自定义键盘快捷键,例如 Alt+D 通过 fzf 选择目录并将其插入在光标位置(我的aliases.sh有一个 Bash 的示例,尽管 Zsh 需要以非常不同的方式完成)。
broot
另一方面是专门的文件树浏览器,但也被设计为通过 shell 函数包装器使用。
broot --print-shell-function >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
运行新创建的br
函数将打开一个文件浏览器,在其中使用 Alt-Enter 选择文件夹将使父 shell 转到cd
所选位置。