web-dev-qa-db-ja.com

実行する前にサブシェルを展開しますか?

私はサブシェルを使用してコマンドを実行することがよくあり、何かを実行する前にサブシェルを展開したい場合があります。このようにして、自分が行っていることを確認し、場合によってはこれから起こることを編集することもできます。

たとえば、実行する前に次のコマンドラインを展開して、サブシェルの結果を編集するにはどうすればよいですか?

例えば.

$ find -name "test.txt" 
/tmp/test.txt

$ mv $(!!) /tmp/new.txt

サブシェルが展開されるのを見たい次のようにコマンドを実行します:

$ mv /tmp/test.txt /tmp/new.txt

これを行う方法はありますか?

11
Brad Parks

_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*_)を使用することもできます。 。

5
Lri

これが便利なトリックです—この行を〜/ .inputrcに追加します(必要に応じてファイルを作成します)。

Control-x:Shell-expand-line

次のいずれかを使用して、履歴のみ、エイリアス、またはその両方を展開することもできます。

Control-x:history-expand-line

または

Control-x:alias-expand-line

または

Control-x:history-and-alias-expand-line

これは収集されました このブログから 、および SuperUserに関するこの質問 、これは非常によく似ています:

2
Brad Parks