2016-10-30 5 views
1

実行時にコマンドラインに何らかのテキスト(実行するコマンド)を入力してカーソルを最後に置くbashスクリプトを作成する方法はありますか?bashスクリプトからコマンドラインを入力する

コマンドを実行すべきではありません。[Enter]キーを押した場合にのみ発生します。私はちょうど時々コマンドにあるいくつかのパラメータを変更できるようにしたい。

例:

# ./do_command.sh 
    # some__very_long_command_with_plenty_of_params param1 param2 param3 | <- and the cursor 
is here waiting for me to just approve hitting the [Enter] or possibly tweak the params before doing so 

私がこれまで持っていることは、コピー、ペーストすることが私を必要とするコマンドをecho'ingだけのスクリプトです。

+0

代わりに、 '。/ do_command.sh'を変更して、パラメータを修正/微調整する必要がないようにしてください。そうすれば、長いコマンドをスクリプトに入れて自動的に実行させることができます。 – VM17

+0

私はコマンドを非常に頻繁に実行する必要があるので、いくつかのパラメータをわずかに変更するだけです。私は、デフォルトのパラメータを調べて(おそらくは変更して)、これらがうまくいくならば単に承認する([Enter]を押す)ことができるようにしたい。 – araches

答えて

1

これを正確に達成できるかどうかは、Bashだけではわかりません。端末アプリケーションのいくつかの追加機能が必要になることがあります。

私は考えることができるオプション:

  • はのparamsをたっぷり使って、それぞれ非常に長いコマンドのオプションのパラメータを持つバッシュ関数を記述します。この関数は、コマンドを出力して確認を求めることもできます。例えば

myfunc() { 
    param1=${1:default1} 
    param2=${1:default2} 
    cmd="command --param $para1 --param $param2" 
    echo running $cmd 
    read -p "<ENTER> to run, <CTRL-C> to abort" 
    $cmd 
} 
  • あなたは文字の特定のシーケンスを記述する際に、引数のために、あなたの入力を求めるとしたときの結果を書きます、このようなDashTextExpanderとしてテキスト補完ツールを使用しますプレスENTER;オンライン拡張と

  • 使用バッシュ別名:のparamsをたっぷり使って非常に長いコマンドのそれぞれのエイリアスを作成し、エイリアスを入力しますが、(まだ)Enterキーを押さないでください、プレスCTRL-ALT-E ;行が拡大され、確認、変更、およびENTERを押すことができます。例えば

$ aliase myfunc="command --param 1 --param 2" 
$ myfunc <CTRL-ALT-E> 
$ command --param 1 --param 2 
  • 使用「ハッシュタグ付き永久歴史」:その行を与えるために一度のparamsをたっぷり使って非常に長いコマンドを使用してコマンドを実行しますが、コメントで終了名前'。次に、あなたが名前( 'ハッシュタグ')例えば

検索するCTRL-Rを使用することができます。

$ command --param 1 --param 2 # myfunc 

を次にCTRL-R

(reverse-i-search)`my': command --param 1 --param 2 # myfunc 
を入力

を入力してコマンドを取得します。

+0

ありがとう、エイリアス、次にCtrl + Alt + eは私が探していたものとまったく同じです。それは私が専用のスクリプトから.bashrcにコマンドを移動させるが、それは私の場合にはさらに良い。 – araches

0

do_commandは、実際にはreadコマンドのラッパーです。

cmd="some__very_long_command_with_plenty_of_params" 
args=("foo bar" "param2" "param3") 
read -e -i "$(printf '%q' "$cmd"; printf ' %q' "${args[@]}")" cmd 
eval "$cmd" 

一般的に、evalは使用すべきではありませんが、ここで、あなたが特にevalを行うように設計されたものである任意のコマンドを実行しようとしています。これは、bashプロンプトで直接コマンドを入力するより危険です。

-eコマンドは、Readlineライブラリを使用して(通常のプロンプトと同様に)コマンドラインを編集するように指示します。 -eはデフォルト値を提供します。 printfコマンドは、コマンド名とデフォルトの引数がevalコマンドで再利用できる方法で出力されるようにします。 %qは引用符を使用しないことに注意してください。 にエスケープする必要がある文字だけをエスケープするためには、foo barはと表示され、"foo bar"または'foo bar'ではなく、foo\ barと表示されます。

関連する問題