コンソールアプリケーション/スクリプトが出力テキストを表示すると、ターミナル入力入力が新しい行に移動します。

コンソールアプリケーション/スクリプトが出力テキストを表示すると、ターミナル入力入力が新しい行に移動します。

現状:アプリケーション/スクリプトがターミナルからバックグラウンドプロセスから始まり、コンソールに出力を提供する場合(つまり、STDOUTなので出力リダイレクトなし)、ターミナルに何かを入力すると、実行中のプロセスはターミナルに何かを出力します。また、同時に、プロセスの出力は私が入力する内容に「追加」され、入力と出力が視覚的に歪みます。

望ましい結果:バックグラウンドプロセスが端末に出力を表示するたびに、「今まで入力した」入力を次の行にスキップできるかどうかを知りたいです。つまり、入力テキストは常に進行中のプロセスとは別に、最後の行に自動的に表示されます。出力)。

基本的に私は、「のようなものを達成する方法を探しています。履歴同期"コマンドはCiscoデバイスのIOSで許可されています(より良い例ここ)を有効にすると、入力中に「システム関連」出力が表示されるたびに、これまで入力したすべての内容が新しい行(常に最後の行)に配置されます。

追加: 視覚的に入力テキストと出力テキストが混在していても、コマンドを入力し続け、Enterキーを押すと正常に機能することがわかります。把握するのは難しいです。正確に出力結果がパニックになったときに何を入れましたか?

私はGnomeと一緒にDebian Jessieを使用しているので、デフォルトのGnome端末と一緒にBashを使用していますが、仮想コンソールを使用すると(CTRL + ALT + F1以降など)、同じ動作が発生します。

これを行うには非常にシンプルでよく知られており、確実な方法があるかどうかはわかりませんが、1時間のうちより良い部分を検索しましたが、役に立たなかったので、これを考える必要がない場合は申し訳ありません。わかります。

または、この機能(存在する場合)は、使用される端末アプリケーションによって異なりますか?

コメントありがとうございます。

答え1

1つのオプションは、バックグラウンドでの作業中にSTDOUTとSTDERRをファイルにリダイレクトすることです。

ls &> job.txt &
[1] 13160
[1]+  Done                    ls &>job.txt

次に、実行中のタスクを確認してください。

jobs
[1]+  Running                 yes &>/dev/null &

また、フォアグラウンドに配置し、割り込みまたは表示してステータスをjob.txt確認することもできます(出力をバッファリングしないと仮定)。

fg 1

操作が完了したら、次のコマンドが完了した後に端末から通知を受け取る必要があります(bashではコマンド入力は中断されません)。

私の考えでは、あなたがこれをやらない理由があると思います。バックグラウンドで利用可能でCrtlI z/ Oをリダイレクトできるかどうかはわかりません。

答え2

私が知る限り、自動的に「魔法の」方法はありません。

端末がクッキングモードにある場合(全画面表示ではなく、readlineサポートや同様の単純なアプリケーションを実行している場合などcat)、端末ルールの「reprint」文字を押すことができます。私の場合はCtrl+Rでした。rprntマニュアルsttyページとstty -a。その後、次の行に進み、入力中のテキストが再印刷されます。

フルスクリーンを実行したり行認識アプリケーションを読み取ったりする場合は、画面または現在の行を再描画する独自の方法(通常Ctrl+RまたはCtrl+)がある可能性があります。L

関連情報