2016-09-08 11 views
0

今私は、似たようなことを尋ねたのでタイトルが実際に私がしたいことを説明していないことを知っていますが、おそらく、私がやろうとしていることの名前がありますが、今は私を逃してしまいます。スクリプトを閉じた後に端末でbashスクリプトの出力を隠すには?

私が達成しようとしていることを説明できる方法は例です。今は、意図したとおりに動作するインタラクティブなbashスクリプトを持っていますが、それを閉じると私の端末にとどまることが気になります。 「トップ」と「htop」と考えてください。上に戻ると新しいプロンプト行が表示されますが、端末には一番上の出力が表示されます。最上部を開いた後に端末をスクロールアップすることもできます。 htopでは、実際には端末上で上下にスクロールすることはできません。また、htopを閉じると、htopを呼び出す最後のプロンプト行だけが表示されます。

私はスクリプトをhtopやviのように "含む"ようにしています。そのため、スクリプト出力を閉じた後にスクリプトの出力を確認する必要はありません。とにかくこれをbashでするには?

#!/bin/bash 
tput smcup 
"[email protected]" 
tput rmcup 

コールこのalt-screen.sh

+1

これは、フルスクリーンアプリケーションで使用される初期化/初期化シーケンスの副作用で、代替画面バッファに切り替わります。 – Barmar

+0

@rednepによって与えられた解決策は、私には最もエレガントです。よりシンプルだが残酷な方法では、スクリプトの最後に 'clear'を呼び出すことです。ただし、インタラクティブなツールが実行される前に**画面上に表示されていた出力も消去されます。 – user1934428

答えて

0

は、次のスクリプトを作成します。

./alt-screen.sh bash -c 'date; sleep 3' 
:具体的な例

./alt-screen.sh foo --option=value arg1 arg2 

を、これを試してみてください。そのスクリプトの助けを借りて、あなたは次のように(htopvi実行される)いわゆる代替画面に他のプログラムを実行することができます

これはどのように機能しますか?それは非常に簡単です。 tputを使用して代替画面に切り替えると、プログラムが実行され、元の画面に戻ります。

注::上記のスクリプトはかなり単純です。さまざまな方法で改善することができます。たとえば、次のバージョンでは、上記のように動作し、また、プログラムのステータスコードを保持します:

#!/bin/bash 
tput smcup 
"[email protected]" 
status=$? 
tput rmcup 
exit $status 

注2:私は広範囲にこれをテストしていませんが、それはほぼ確実に、望ましくない副作用を持っています多くの場合、うまくいくかもしれません。

関連する問題