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

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

私はこれを知っていましたが、各プロンプトの前に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回も実行しましたが…実際には実用的ではありません。

答え2

/etc/profileただ、またはに入れた/etc/issue。問題ファイルの内容を見せることが時々消えることもありますが、それでも参考には良いようです。

変数の内容を変更するのは$PS1問題ないようです。そして、まだいくつかの警告を印刷したいかもしれません/etc/profile。これは本番システムなので、システムで継続的な変更が発生したいので、これらのファイルを編集できます。 (通常、これらのファイルを変更するのではなく、代わりにユーザーファイルを使用することをお勧めします。)

答え3

次のコマンドを使用して、ホスト、時刻、場所、およびgit分岐を表示できます。

HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH

ホストなどの項目を変更できます。

コマンドを実行するには、バックティック( these')を使用してください。

関連情報