获取屏幕输出行作为命令的参数

时间:2018-04-10 16:47:58

标签: linux bash unix command-line zsh

在bash(或zsh)中,有没有办法'回顾'以前的输出?

说我有以下内容:

$ find . -depth 1 -name "d*"
dir1
dir2
dir3

$ cd [3rd line]

我可以从前一个输出中选择'dir3'而不重复上一个命令并使用管道吗?只是从屏幕上“抓住它”?

2 个答案:

答案 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都没有提供此功能。如果有办法做到这一点,很高兴得到纠正。 :)