コマンドラインの最後の出力を再利用するには?

コマンドラインの最後の出力を再利用するには?

コンソールの最後の出力を再利用する方法を知りたいです。例:

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またはそれをサポートする他のシェルを実行していますが、コマンドは冪等であり、2番目の実行を待つことは問題ではなく、最後のコマンドラインを!!取得する形式で履歴拡張を使用できます。再度、コマンド置換で前のコマンドを再実行するには、次のようにします。

% 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

バッシュプロンプト

$ 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

関連情報