2017-06-24 6 views
0

私は、このスクリプトのソースを入力すると、Enterキーのreadlineの再バインドによって、カスタム関数を介して入力されたすべての行を渡します。bashのreadline:プロキシの入力キー

my_eval() { 
    local cur_line="$READLINE_LINE" 
    (...) <some special checks and actions if line matches criteria > 
    # when crits DON'T match I want normal behaviour: 
    eval "$cur_line" # <- the only way? 
    READLINE_LINE=""   
} 
bind -x '"\C-M": "my_eval"' 

私の問題は、このような入力ハンドラ内で正常な動作を取得する方法である:「特別」でevalの唯一の方法を呼んでいるか、入力されたときの通常の動作をreadlineのために、この時点でフォールバックすることは可能であろう(つまり、accept-line関数を何らかの方法で呼び出しますが、これは通常\C-Mにバインドされています(bind -P)。私はまた、対話型のコマンドのリダイレクト、歴史、表示プロンプトとコマンドの結果を表示する前に、手動で複数行の式を処理の世話をする必要がevalをベースとしたソリューションで

...

答えて

0

は本当に起動する方法を見つけることができませんでしたスクリプトからreadlineのaccept-lineをプログラムで実行します。 私は手動で動作を模倣しようとしました。 evalよりもはるかに優れていると思われ、fc -sを使用して最後のコマンドを実行します。多分誰かへの使用の私の作品

...大丈夫っぽい、ので、私は上に置く:history -sを経て歴史に$READLINE_LINE内に設けるよう基本的に私は式を押し

https://github.com/axiros/readline_proxy/

彼らが完了したとみなされるとき。そして、履歴の最後の文をfc -sで実行します。

Hereはコードです。

関連する問題