端末出力の出力順序を変更する標準的な方法はありますか?つまり:
~/Developer $ command0
-bash: comman0: command not found
~/Developer $ command2
-bash: command2: command not found
~/Developer $ command3
-bash: command3: command not found
~/Developer $
次のように表示されます。
~/Developer $
-bash: command3: command not found
~/Developer $ command3
-bash: command2: command not found
~/Developer $ command2
-bash: comman0: command not found
~/Developer $ comman0
常に下部にプロンプトを表示することが直観にずれていると考えており、出力を表示するより効率的な方法は出力の順序を変更することです。これをどのように実装しますか?具体的には、OSX端末プログラムの出力部分はどこで定義されていますか?
答え1
Bashでは、上部に現在のプロンプト/コマンドが表示され、下部に出力が表示されますが、スクロールまたは前のコマンドは表示されません。
PROMPT_COMMAND='tput cup 0 0; tput el; tput el1'
この関数は前のコマンドを下に配置しますが、各コマンドを個別にパイプする必要があります。残念ながらexec > >(f)
、この問題は個々のコマンドではなく bash 全体をリダイレクトするので、解決する方法はありません。機能は次のとおりです。
f () { tee ~/.STDIN | wc -l | xargs expr 1 + | xargs tput il && cat ~/.STDIN; }
次に、次のように各コマンドを実行します。
command args |f
出力を保存し、長さ+1などの空行を作成し、出力を再挿入します。必要に応じて、最後に偽のヒントや地平線を示す線を表示できます。例えば
printf '%*s' $COLUMNS | tr ' ' _;
関数全体のゴミですが、自動代替として、前の $PROMPT_COMMAND の末尾にコマンドを追加することで、ややランダムな11行を消去できます。
PROMPT_COMMAND='tput cup 0 0; tput el; tput el1; tput il 11'
tput -S
複数のバイナリ呼び出しを防ぐためにそれを使用することもできます。
$PROMPT_COMMAND
私はそれから得たhttps://github.com/swirepe/alwaysontop。
答え2
残念ながら、これは非常に難しいでしょう。アプリケーションとOS-X端末間のプロトコルは次のとおりです。VT100/ANSI特に端末制御プロトコルXタム規約。
これには、画面の位置などに関する一連の仮定が含まれ、反対の世界を表示するために再マッピングすることは困難です。
さらに悪いことは、端末エミュレータが取得するすべてが「ここにこの文字を入力してください」タイプのコマンド文字列です。コマンドプロンプトと実行されるコマンドの出力との間に違いはないため、少なくとも基本シェルの協力なしに両方の部分で操作を実行することはできません。
シェルとプログラムは、画面が上に移動すると仮定します。新しいデータは下にあり、常に下に移動します。
少なくとも理論的には、行を逆順に表示するように端末エミュレータを変更することができます。つまり、「一番下」の行が最初に表示されるように、画面の一番下の「上」の行まで表示されます。
ただし、これによりコマンド出力の行の順序が変わり、残りのコンテンツも後ろに表示されます。コマンド(ls、catなど)を「下」として実行し、「上」に移動するように求めるメッセージを表示するには、人生はより困難です。
この機能を実行できるソフトウェアはありません。 (...しかし、これへのリンクはJdeBDの説明を参照してください。):)
答え3
出力は完全に反転されませんが、プロンプトは一番上に保持されます。
https://github.com/swirepe/alwaysontop
使用するには、以下を実行してください。
git clone https://github.com/swirepe/alwaysontop.git
cd alwaysontop/
source alwaysontop.sh
気に入った場合は、次のように.bash_profileにソースを入力してください。
echo "source ~/alwaysontop/alwaysontop.sh" >> ~/.bash_profile