2016-01-15 8 views
6

私はコマンドを返すBashスクリプトを持っています。私はスクリプトを実行し、次の行のプロンプトの後ろに結果を自動的に出力させたいと思います。現在の行でスクリプト呼び出しを置き換えることもオプションになります。このようにして、コマンドを実行する前に編集することができます。 これはBashの端末で実現できますか?次の行にプロンプ​​トを表示してbashスクリプトの結果を表示します

+2

を、次のコマンドを含むエディタを開き、編集したファイルをソース可能性: 'トラップ 'rm -f - " $ cmd_file "' EXIT; cmd_file = $(mktemp); printf%s \\ n "$ command"> "$ cmd_file"; $ {EDITOR:-nano} - "$ cmd_file" &&(。 "$ cmd_file") ' – user3035772

+2

@ user3035772良いアイデア!しかし、 '$ {EDITOR:-vim}'; D – hek2mgl

+0

関連:http://stackoverflow.com/questions/5374255/how-to-write-data-to-existing-processs-stdin-from-external -process –

答えて

0

user3035772's commentで与えられている「一時ファイルを使用する」オプション以外の方法は、シェルの履歴を使用することです。

あなたは歴史の中でコマンドを格納するhistory -sを使用し、それを思い出すことができ、出力をシェルコマンドである(あるいはあなたがその出力を後で実行したいだけコマンドであることを確認することができます)を作成し、コマンドを想定すると、それを編集するにはコマンドラインで(またはfcを使用してください)。

history -s 'echo whatever you "want your" command to be' 

次に、あなたの$EDITORでそれを編集したり、現在の入力ラインに履歴項目をロードするために上矢印またははCtrl-Pをヒットするfcを使用しています。

1

tmux(ターミナルマルチプレクサ)内でbashを実行する場合、そのバッファ機能を使用してプロンプトでコマンドを貼り付けることができます。コマンドを実行する前に編集できます。

#!/bin/bash 
tmux set-buffer 'ls -l' 
tmux paste-buffer & 

ペーストバッファコマンドをバックグラウンドに置くと、ペーストが実行される前にプロンプ​​トが出力されます。ペーストがあまりにも速くなった場合、あなたはそのようなサブ秒スリープ追加することができます。この動作が容易に実装できる代替手段として

#!/bin/bash 
tmux set-buffer 'ls -l' 
{ sleep .25; tmux paste-buffer; } & 
関連する問題