如何重用命令行的最后一个输出?

如何重用命令行的最后一个输出?

我想知道如何重用控制台的最后一个输出,即:

pv-3:method Xavier$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/Library/Python/2.6/site-packages
pv-3:method Xavier$ cd **LASTOUTPUT**

答案1

假设历史扩展已启用,您正在运行 Bash 或其他支持它的 shell,该命令是幂等的,并且等待它第二次运行不是问题,您可以使用!!历史扩展的形式来再次获取最后一个命令行,以在命令替换中再次运行上一个命令:

% python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/usr/lib/python2.7/site-packages
% cd $(!!)
cd $(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
% pwd
/usr/lib/python2.7/site-packages

答案2

还没提到,使用变量:

dir=$( python -c ... )
cd "$dir"

答案3

所有其他解决方案都涉及修改工作流程或运行命令两次,如果运行时间较长或不可重复(例如,它删除文件 - 重新运行会产生不同的结果),这可能不适合。

所以如果你需要的话,这里有一个更复杂的想法:

.bashrc

exec > >(tee -a ~/$$.out)

PROMPT_COMMAND='LASTLINE=$(tail -n 1 ~/$$.out)'

trap 'rm ~/$$.out' EXIT

bash 提示符

$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/usr/lib/python2.6/dist-packages
$ cd $LASTLINE
$ pwd
/usr/lib/python2.6/dist-packages

这有一些问题,所以它只是作为一个起点。例如,输出文件 ( ~/<pid>.out) 可能会变得非常大并填满您的磁盘。另外,如果死了,你的整个外壳可能会停止工作tee

可以将其修改为仅使用 zsh 中的钩子捕获上一个命令的输出preexecprecmd或者模仿他们在 bash 中,但这里描述起来更复杂。

答案4

尝试这个:

$ cd $(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
$ pwd
/Library/Python/2.6/site-packages

相关内容