在bash(或zsh)中,有没有办法'回顾'以前的输出?
说我有以下内容:
$ find . -depth 1 -name "d*"
dir1
dir2
dir3
$ cd [3rd line]
我可以从前一个输出中选择'dir3'而不重复上一个命令并使用管道吗?只是从屏幕上“抓住它”?
答案 0 :(得分:1)
shell根本没有看到输出 。当find
运行时,它使用从shell继承的文件句柄来编写其输出,但是shell不可见(尽管它是,但是shell不是不要缓存它。
但是,鉴于您使用的是zsh
,您应该询问涉及外部命令的第一个问题是“我是否还需要外部命令?”通常情况下,你不在这里。不要使用find
,只需使用print
和glob来获取相同的列表:
% print -l d*
然后使用限定符再次使用相同的glob来选择第3个结果。
% cd d*([3])
(这假设d*
的扩展在运行print
命令和运行cd
命令之间不会改变。)
或者,您可以自己缓存结果:
% choices=( d* )
% print -l $choices
dir1
dir2
dir3
% cd $choices[3]
基于数组的解决方案也可以在bash
中工作,但语法略有不同(假设您的find
命令很简单,可以替换为bash
之一远没那么强大的球。)
最后,有select
命令:
select d in d*; do
cd "$d"; break;
done
也将在bash
中按原样运行,再次假设有效的glob。
答案 1 :(得分:0)
粗略搜索显示bash和zsh都没有提供此功能。如果有办法做到这一点,很高兴得到纠正。 :)