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


11

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

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

例えば

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

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

コマンドを実行するに、次のようにサブシェルを展開したいと思います。

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

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


1
zshはこれを行うことができますが、私はbashができないことをかなり確信しています。zshでは、パラメーターにカーソルを合わせてTABキーを押すと、それが展開されます
Patrick

私はその後切り替えましたが、zshあなたが示唆するように、これは素晴らしいことです。bash質問だったので、ここでは元の答えのままにしておきます。
Brad Parks

回答:


5

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\egglob-expand-word\C-x*


2

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

Control-x:シェル展開行

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

Control-x:履歴拡張行

または

Control-x:エイリアス拡張行

または

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.