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

Linux 获取屏幕输出行作为命令的参数,linux,bash,unix,command-line,zsh,Linux,Bash,Unix,Command Line,Zsh,在bash(或zsh)中,是否有方法“回顾”以前的输出 假设我有以下几点: $ find . -depth 1 -name "d*" dir1 dir2 dir3 $ cd [3rd line] 我是否可以在不重复上一个命令和使用管道的情况下从上一个输出中提取“dir3”?只是在屏幕上“抓住它” 粗略搜索发现bash和zsh都不提供此功能。如果有办法做到这一点,很高兴被纠正。:) shell根本看不到该输出。当运行find时,它使用它从shell继承的文件句柄来写入其输出,但是shell看不

在bash(或zsh)中,是否有方法“回顾”以前的输出

假设我有以下几点:

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

$ cd [3rd line]

我是否可以在不重复上一个命令和使用管道的情况下从上一个输出中提取“dir3”?只是在屏幕上“抓住它”

粗略搜索发现bash和zsh都不提供此功能。如果有办法做到这一点,很高兴被纠正。:)

shell根本看不到该输出。当运行
find
时,它使用它从shell继承的文件句柄来写入其输出,但是shell看不到该句柄(即使是,shell也不会缓存它)


但是,考虑到您正在使用
zsh
,您应该问的第一个涉及外部命令的问题是,“我甚至需要外部命令吗?”通常情况下,您在这里不需要。不要使用
find
,只需使用
print
和glob即可获得相同的列表:

% print -l d*
然后再次使用相同的glob和限定符来选择第三个结果

% cd d*([3])
(这假设在运行
print
命令和运行
cd
命令之间,
d*
的扩展不会改变。)

或者,您可以自己缓存结果:

% choices=( d* )
% print -l $choices
dir1
dir2
dir3
% cd $choices[3]
基于数组的解决方案也可以在
bash
中工作,不过语法稍有不同(并且假设
find
命令足够简单,可以用
bash
功能远不如bash的globs中的一个替换)

最后,还有
select
命令:

select d in d*; do
  cd "$d"; break;
done

它也将像在
bash
中一样工作,再次假设一个有效的glob。

快速研究表明bash没有保存任何输出的历史记录。我假设这是不可能的。你用bash还是zsh?我用zsh。我也会对bash解决方案感兴趣,因为它非常常见。
tmux
提供了一种复制模式,在这种模式下,您可以在终端缓冲区中向后滚动,复制文本块,并在退出复制模式后将其粘贴到命令行上。