各プロンプトの前に実行するコマンドをどのように設定しますか?

各プロンプトの前に実行するコマンドをどのように設定しますか?

私はこれを知っていましたが、各プロンプトの前に1つのコマンドまたは複数のコマンドを実行したいという事実を忘れていました。 PRODボックスにいるときは、各プロンプトの上に次のような大きな通知があります。*製作中です*たぶん1つか2つであるかもしれません。現在はこのようにメールを確認するようですが、どのように設定をしたのか覚えていません。

kshとSolaris 5.10の使用

どんなアイデアがありますか?

ありがとう

ベストアンサー1

必要なものが大きく固定された警告だけである場合は、プロンプトに次のものを追加してください。

red=$(tput setaf 1; tput smso; tput bold) reset_color=$(tput sgr0)
PS1='
${red}[THIS IS A PRODUCTION SYSTEM!!]${reset_color}

rest of the prompt$ '

ksh(ksh93、mksh)の最新(1995年以降)の実装は、$PS1コマンド置換とパラメータ拡張の影響を受けるため、次のことができます。

function mywarning {
  tput setaf 1; tput bold
  date "+it's %T, please remember it's a production system"
  tput sgr0
}

PS1='$(mywarning)# '

ksh88(/usr/bin/kshSolaris 10でも同じ)では、プロンプトでパラメータとチルダ拡張のみが実行されます。

プロンプトで素晴らしい内容を見るには、スマートトリックに戻る必要があります。これにより、できることは非常に制限されます。

算術拡張は行われませんが、次のような拡張が可能なため、算術式(ここ)を評価${array[expr]}できます。expr割り当て(数値のみ)は算術式内で実行できるため、これはいくつかの素晴らしいタスクを実行する機会を提供します。

$SECONDS、、、、、、$PWDなどの動的変数を後処理$?するために使用できます。$!$RANDOM$_

たとえば、次のようにHH:MM:SS日付を取得できます。

typeset -Z2 _h _m _s
eval "$(date +'SECONDS=$((%H*3600+%M*60+%S))')"
PS1='${z[(_h=SECONDS/3600)+(_m=(SECONDS/60)%60)+(_s=SECONDS%60)]}${_h}:${_m}:${_s} $ '

あなたはあなたを追加することができます肥満警告5回ごとのプロンプト:

set -A warn '' '
[THIS IS A PRODUCTION SYSTEM!!]
' '' '' ''
PS1='${warn[warn_count=(warn_count+1)%5]}# '

各プロンプトの前にコマンドを実行することはできないようですが(メールの確認は内部的に行われますksh)、DEBUGトラップを使用して各コマンドの後にコマンドを実行できます。

trap 'my-command' DEBUG

すべてのサブシェルのすべての簡単なコマンドの後にこれが実行されることに注意してください。

たとえば、

for f in *; do :; done

my-command現在ディレクトリにあるファイル数だけ実行されます。

存在する:

: | :

3回も実行しましたが…実際には実用的ではありません。

おすすめ記事