シェルには、キーボードの上矢印を押すと、現在のコマンドラインの内容が前のコマンドラインの内容に変わる便利な機能があります。注文するすでに入力されています。 (この操作をやり直すと、前のコマンドが実行される式です。)
(他のボタン)を押すと、現在のコマンドラインの内容が次のように変わるような機能が必要です。出力の最後の行前のコマンド(または再実行された場合は前の出力ラインなど)
そのような機能を提供するシェルはありますか?
その理由は、前のコマンドの出力の一部を入力として使用して1つのコマンドを実行し、次に別のコマンドを実行したい場合が多いからです。 (いいえ、私は1つのコマンドの出力を次のコマンドにパイプすることに関連することをしたくありません。インタラクティブ最初のコマンドを実行した経験、バラより次に、マウスでぎこちなくコピーして貼り付ける必要なく、その出力の1行を次のコマンドに入力します。 )
答え1
内部でシェルを実行している場合は、ロールバックモードを使用してこれを達成できますscreen
。screen
主キーバインディングを使用してください。
- CtrlAEscロールバックモードに入ります。
- 上下に移動するには、キーを移動します。
- Y現在の行を貼り付けバッファにコピーし、スクロールバックモードを終了します。
- CtrlA]バッファを貼り付けます。
マニュアル(実行man screen
)では、ロールバックモードの追加機能(検索、部分コピーなどを含む)の詳細と説明を提供します。
tmux
間違いなく同様の特性を持っています。
答え2
私が正しく理解した場合は、1つのコマンドの出力から最後の行を取得し、新しいコマンドで実行したいと思います。したがって:
$ $( /path/to/command_generator | tail -n1 )
またはディスク上のファイルの内容の場合:
$ $( tail -n1 /path/to/RUNME.txt )
実行する前に編集するには、vipe
実行中のパイプラインの内容を編集するためのツールがあります。
$ $( /path/to/command_generator | vipe )
答え3
`!!`
たとえば、ファイルを検索するために前のコマンドを再実行し、その出力をインラインで使用したいとします。
$ find . -name "myfile.txt"
./dir/files/myfile.txt
$ emacs `!!` &
emacs `find . -name "myfile.txt"` &
これは次のとおりです。
$ emacs ./dir/files/myfile.txt &
答え4
Bashは非対話型コマンドの出力を保存できます。その後、Ctrl-Gを使用してエディタで開き、目的のフィールドを現在のコマンドラインにインポートできます。https://asciinema.org/a/395092