私はサブシェルを使用してコマンドを実行することがよくあり、何かを実行する前にサブシェルを展開したい場合があります。このようにして、自分が行っていることを確認し、場合によってはこれから起こることを編集することもできます。
たとえば、実行する前に次のコマンドラインを展開して、サブシェルの結果を編集するにはどうすればよいですか?
例えば.
$ find -name "test.txt"
/tmp/test.txt
$ mv $(!!) /tmp/new.txt
サブシェルが展開されるのを見たい前次のようにコマンドを実行します:
$ mv /tmp/test.txt /tmp/new.txt
これを行う方法はありますか?
_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*
_)を使用することもできます。 。
これが便利なトリックです—この行を〜/ .inputrcに追加します(必要に応じてファイルを作成します)。
Control-x:Shell-expand-line
次のいずれかを使用して、履歴のみ、エイリアス、またはその両方を展開することもできます。
Control-x:history-expand-line
または
Control-x:alias-expand-line
または
Control-x:history-and-alias-expand-line
これは収集されました このブログから 、および SuperUserに関するこの質問 、これは非常によく似ています: