在 bash(或 zsh)中,有没有办法“回顾”之前的输出?
假设我有以下内容:
$ find . -depth 1 -name "d*"
dir1
dir2
dir3
$ cd [3rd line]
我可以在不重复上一个命令和使用管道的情况下从上一个输出中提取“dir3”吗?只是从屏幕上“捕获它”?
最佳答案
shell 根本看不到输出。当 find
运行时,它使用它从 shell 继承的文件句柄来写入 它的 输出,但这对 shell 是不可见的(尽管即使它是, shell 没有缓存它)。
但是,鉴于您正在使用 zsh
,涉及外部命令时您应该问的第一个问题是,“我什至需要外部命令吗?”通常情况下,你不在这里。不要使用 find
,只需使用 print
和 glob 即可获得相同的列表:
% print -l d*
然后再次使用相同的 glob 和限定符来选择第三个结果。
% cd d*([3])
(假设 d*
的扩展在运行 print
命令和运行 cd
命令之间不会改变。)
或者,您可以自己缓存结果:
% choices=( d* )
% print -l $choices
dir1
dir2
dir3
% cd $choices[3]
基于数组的解决方案也可以在 bash
中工作,尽管语法略有不同(并假设您的 find
命令足够简单,可以用 bash
的 glob 功能要弱得多。)
最后是select
命令:
select d in d*; do
cd "$d"; break;
done
这也将在 bash
中按原样工作,再次假设一个有效的 glob。
关于linux - 获取屏幕输出行作为命令的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49758997/