この質問は数日間私を悩ませてきました。ここに、私が学んだすべての資料を含む編集済みの投稿があります。具体的には、私の目標は、BASHでプロンプトの次に時計を表示することです。Radu Radeanuが答えで言及したように、重要なのは、画面や入力内容に干渉することなく、常にコマンドプロンプトを更新したり、画面を再描画したりできる関数または変数を見つけることです。一方、これはG_Pが示すようにwhileループで実現できますが、tput関数を使用して画面を絶えず再描画すると、画面が更新された瞬間に画面上にあるテキストが乱れます。G_Pが投稿したコードを多少変更することで、OPが要求したものにかなり近づきましたが、それでもRaduの答えはOPが望むものに最も近いと思います。さらに苦労せずに、ここに私がしていることのいくつかを紹介します
#1、私が好む解決策:ターミナルマルチプレクサ
端末マルチプレクサは、端末画面を2つ以上の画面に分割できるソフトウェアです。特に、By風ターミナルに注目したい。このncursesベースのターミナルエミュレータを使用すると、時間、CPUの割合、メモリ、その他のインジケーター全体を表示できます。私のbyobu端末のスクリーンショットでは、CPU温度、バッテリーの割合、インターネット接続の品質、CPU周波数、RAM、日付、そしてもちろん時間を確認できます。ターミナルにいる間にこれらのことを常に監視することにほとんど関心がある場合は、By風が最適です。実際、私はそれがとても好きになり、ttyにログインしている間に自動的にロードするように設定しました。唯一の癖は、ttyでは個別のウィンドウを実際にマージできないことです。F3キーとF4キーでタブを切り替えるだけです。
多重化ウィンドウを含む代替ソリューションはsplitvt
、画面を2つの部分に分割するを使用することです。などの端末クロックを実行できます。また、tty-clock
watchコマンドで日付を使用するか、スクリプトで自分でコーディングすることができます。それについては後で詳しく説明します。スクリーンショットでは、通常のbashプロンプトが上部にあるスプリットの一部を見ることができ、下部では、date
コマンドの出力を常にコマンドで更新するスクリプトが実行されていることがわかりますclear
。
#2、While Do Loopとtput
これはおそらく、質問をした人がbashで実装したかったものに最も近いものです。
G_Pは関与素晴らしい解決策掲載しているwhile do
とtput
のコマンドを。しかし、G_Pのコードには、私が気に入らない2つのことがありました。1つは、クロックがプロンプトの右側にあり、2つは-スリープサイクルが1秒であるため(スリープと呼ばれる元のコードを参照)、画面が毎秒再描画され、出力が台無しになります。私がしたことは、\ n演算子でbashプロンプトを1行下に編集し、G_Pのコードを変更して、tput演算子がプロンプトのすぐ上にクロックを配置し、60秒ごとに更新することです。時計のループが画面を台無しにしない一方で、時間と分を見ることができます(そして、私は正確に分を気にしません)。最初に、ここに私のプロンプトがあります:
PS1='${debian_chroot:+($debian_chroot)}\n[*\u@Ubuntu*]\n $(date) :\w\$ '
そして、ここにG_Pの修正されたコードがあります: enter code here
while sleep 60;do tput sc;tput cup 0 0;date +%R;tput rc;done &
小さな編集:上記のこのコードでは、すぐに時計が表示されないことがあります。より良いバージョンがあります:while true; do tput sc;tput cup 0 0;date +%R;tput rc; sleep 60; done &
これは最初に画面に時計を配置し、次にbashに60秒のスリープサイクルを経ることを知らせます
tput cup 0 0は画面の右上隅に時計を配置し、プロンプトのすぐ上にスリープします。sleep60はスリープサイクルを60秒に変更します。このように、画面にあるテキストはほとんど影響を受けません(クロックが更新されるのと同じ時間にコマンドを実行する場合のみ)。
PS1行は既に.bashrcプロファイルに含まれているため、少し調整するだけです。while doループは、同じファイルのどこかに追加する必要があり、できれば最後に#コメントを付けて、これは最初に追加したものである必要があります。また、bubuを作成して元の状態に戻す必要がある場合に備えて、常にそのようなファイルをバックアップすることを忘れないでください。
#3、スクリプト作成およびその他
この部分は、単に時間を見たい人のためのものです。常時監視したい人にとっては、#1と#2が好ましいオプションです。
したがって、while doループは既に見てきたように非常に便利です。ここでは、while do loop、date、およびsleepコマンドを使用してクロックを作成する方法を示します。
Return / Enterを押すと、基本的に、クリアされた画面にdateコマンドの出力が毎秒表示されます。毎回すべて入力したくない場合は、このすべてをスクリプトに変換します。
#!/bin/bash
while true
do
clear;date
sleep 1
done
これで、bashの1つのインスタンスでsplitvtを使用してそのスクリプトを実行し、もう1つのインスタンスで作業できます。
別の解決策はwatch -n1 date
コマンドです。これは、1秒の期間で継続的に日付コマンドを実行します。
結論として:この質問に対する答えを見つけようとしていくつかのことを学びました。私の発見が何らかの形であなたの助けになることを望み、この質問に貢献できたと思います。ビョーブターミナルIMHOが最適なソリューションですが、自分で決定し、調査を行い、最適な方法を選択してください。
調査中に見つけたもの:
私の元の投稿、最小限の解決策:〜/ .bashrcファイルを編集します。nanoで編集するのが好きなので、
nano ~/.bashrc
編集したファイルの一部を次に示します。
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\$'
else
# PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]:\w\$ '
PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]\t:\w\$ '
fi
elseステートメントの後、最初の行は#(これは私の古いプロンプトです)でコメント化され、2行目が必要な行、具体的には\t
演算子になりました。これは、実行時間を24時間形式で示しています。詳細情報については、チェックアウトこれを。また、小さなメモですが、色付きのプロンプトを使用していないため、他のものを使用しています。
PS:答えに何かを追加するか、何らかの方法で編集する必要があるかどうかを教えてくださいそれに新しい。
$PS1
(プロンプト)変数に時間を設定することもできますが、変更されるかどうかはわかりません。