私はしばしばコマンドを実行するためにサブシェルを使用し、時には何かを実行する前にサブシェルを拡張したいと思います。これにより、私がやっていることを確認したり、将来の作業を編集したりできます。
たとえば、サブシェルの結果を編集できるように実行する前に、次のコマンドラインを展開するにはどうすればよいですか?
例えば
$ find -name "test.txt"
/tmp/test.txt
$ mv $(!!) /tmp/new.txt
サブシェル拡張を見たいです。今後次のようにコマンドを実行します。
$ mv /tmp/test.txt /tmp/new.txt
これを行う方法はありますか?
答え1
shell-expand-line
(\e\C-e
)はbashのコマンド置換を拡張します。
$ bind -p|grep shell-ex
"\e\C-e": shell-expand-line
$(!!)\e\C-e
前のコマンドを再実行して出力を挿入します。
"\eo": "$(!!)\e\C-e"
また、他のコマンド置換も拡張しますがshell-expand-word
。
Bash 4.0以降では、を有効にして入力globstar
し、()または()を**/file.txt
使用することもできます。glob-complete-word
\eg
glob-expand-word
\C-x*
答え2
以下は便利な方法です。 ~/.inputrcに次の行を追加します(必要に応じてファイルを生成します)。
Control-x: シェル拡張ライン
次のいずれかの方法を使用して、履歴またはエイリアスのみを拡張したり、その両方を拡張したりできます。
Control-x: 記録拡張ライン
または
Control-x:エイリアス拡張行
または
Control-x:履歴とエイリアスの拡張行
収集した内容ですこのブログでとスーパーユーザーに関する質問、これは次のようによく似ています。