回答:
私~/bin/setprompt
が実行するスクリプトがあり.bashrc
、次のものが含まれています。
RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"
# Throw it all together
PS1="${RESET}${YELLOW}\h${NORMAL} \`${SELECT}\` ${YELLOW}>${NORMAL} "
このスクリプトは、:)
最後のコマンドが成功した:(
かどうか、最後のコマンドが失敗したかどうかが後に続くホスト名にプロンプトを設定します。
しかし、これは私が今まで見た中で最も素晴らしいものです:
PS1='\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[0;28m\]Managing \033[1;31m\]\j\[\033[0m\]\[\033[1;30m\]/\[\033[0m\]\[\033[1;31m\]$(ps ax | wc -l | tr -d '\'' '\'')\[\033[0m\]\[\033[1;30m\] \[\033[0m\]\[\033[0;28m\]jobs.\[\033[0m\]\[\033[1;30m\]] [\[\033[0m\]\[\033[0;28m\]CPU Load: \[\033[0m\]\[\033[1;31m\]$(temp=$(cat /proc/loadavg) && echo ${temp%% *}) \[\033[0m\]\[\033[0;28m\]Uptime: \[\033[0m\]\[\033[1;31m\]$(temp=$(cat /proc/uptime) && upSec=${temp%%.*} ; let secs=$((${upSec}%60)) ; let mins=$((${upSec}/60%60)) ; let hours=$((${upSec}/3600%24)) ; let days=$((${upSec}/86400)) ; if [ ${days} -ne 0 ]; then echo -n ${days}d; fi ; echo -n ${hours}h${mins}m)\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:.\n\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[1;31m\]$(ls -l | grep "^-" | wc -l | tr -d " ") \[\033[0m\]\[\033[0;28m\]files using \[\033[0m\]\[\033[1;31m\]$(ls --si -s | head -1 | awk '\''{print $2}'\'')\[\033[0m\]\[\033[1;30m\]] [\[\033[0m\]\[\033[1;31m\]\u\[\033[0m\]\[\033[0;31m\]@\[\033[0m\]\[\033[1;31m\]\h \[\033[0m\]\[\033[1;34m\]\w\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:.\n\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[1;31m\]\t\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:. \[\033[0m\]\[\033[1;37m\]$ \[\033[0m\]'
試してみます。良い情報が得られますが、プロンプトでEnterキーを押すだけで、ボックスの負荷が実際に増加します。
私は自分の時間を含めるのが好きです。time
私のコマンドの周りに組み込みのようなものを与えます:
PS1="[\t \u@\h:\w]$ "
これらをいくつか見た後、私は鉱山をもう少しスマートにしたいと思います!
これが私のものです(右にスクロールすると、さらに興味深いビットが表示されます)。
'-------------------------------------------------------------------------------\n${debian_chroot:+($debian_chroot)}[\w]\n\u@\h\[\033[1;33m\]\[\033[0m\]($(__git_ps1 "%s")$(parse_git_dirty))$
結果は次のとおりです。
-------------------------------------------------------------------------------
[~]
user@host()$
-------------------------------------------------------------------------------
[~/path_to_repo]
user@host(master)$
バッファのスキャンを簡単にするために、複数の改行と「水平定規」を使用することを選択します。そのため、長いパス名によってカーソルが右に遠くに移動することはありません。
kshの場合:
私の.profileで、次の変数を設定します(したがって、この変数は、いくつの 'su'を実行しても、セッションごとに1回だけ設定されます。
PCH=\>
私の.kshrcには:
if let "${SPID:-0} != $$"; then
PCHS="$PCHS$PCH"
fi
「su」ではなく、次のエイリアスでrootになります(krootは、sh(solaris)またはbash(linux)ではなくkshシェルを持つrootユーザーです):
alias root='PCH=\# su -m kroot'
alias me="PCH=\> su -m $USER"
これら2つの関数も定義しました。
function lprompt {
PS1=$HOST' $? $PWD '"$PCHS "
}
function sprompt {
PS1='$?":"${PWD##*/}'"$PCHS "
}
そして最後に.kshrcの最後に私は持っています:
lprompt
これらすべてにより、デフォルトでプロンプトの終わりが自動設定され、自分がrootであるかどうか(つまり、親がrootだった場合)、現在の作業ディレクトリ、ホスト名、および最後のプロセスの終了ステータスが示されます。spromptは、ホスト名を削除し、パスをベース名のみに縮小し、スペースを削除します。
g3 0 /home/jj33 > expr 1 / 0 expr: division by zero g3 2 /home/jj33 > expr 1 / 1 1 g3 0 /home/jj33 > root Password: g3 0 /home/jj33 ># me g3 0 /home/jj33 >#> ^D g3 0 /home/jj33 ># sprompt 0:jj33># me g3 0 /home/jj33 >#> sprompt 0:jj33>#>expr 1 / 0 expr: division by zero 2:jj33>#>
root / meエイリアスは、Solarisでのsudo以前の管理から生まれたものであり、古い習慣は根絶されています。最近、まったく同じものを実装する人はいないでしょう。迅速に変化する機能と現在のステータスは、私にとって非常に貴重なものです。
簡単なプロンプトがありますが、色を使用していくつかの追加情報を提供します。
drewble:~$
ホスト名の色(この場合、drewble)はマシンごとに異なります-作業する新しいマシンを取得するとき、そのマシンに任意の色を選択します。そうすれば、多数の端末を開いているときに、どのマシンにSSH接続されているかが簡単にわかり、間違ったマシン上にいることによるミスを減らすことができます。さらに、そうするときsudo -s
は、ホスト名をすべて大文字にし、コロンを赤に着色します。これにより、ルートとして機能していることが明確になり、間違いが減ります。パス(~
この場合、私のホームディレクトリ)は明るい緑色で表示され、出力の行を分割するのに役立ちます。何かが大量の出力を作成する場合、上にスクロールして出力がどこから始まったかを簡単に確認できます。
# Color the hostname
HOSTNAME=`hostname|sed -e 's/\..*$//'`
if [ $HOSTNAME = 'Caligula' ] || [ $HOSTNAME = 'Caligula.local' ]; then
export HOST_COLOR="\[\033[1;35m\]"
fi
if [ $HOSTNAME = 'drewble' ]; then
export HOST_COLOR="\[\033[1;34m\]"
fi
if [ $HOSTNAME = 'davinci' ]; then
export HOST_COLOR="\[\033[1;31m\]"
fi
# Color the colon red & capitalize hostname if root
COLON_COLOR='0m'
if [ ${UID} -eq 0 ]; then
COLON_COLOR='1;31m'
fi
if [ ${UID} -eq 0 ]; then
HOSTNAME="`echo $HOSTNAME|tr '[a-z]' '[A-Z]'`"
fi
# Set the actual prompt
PS1=`echo -ne "$HOST_COLOR$HOSTNAME\[\033[00m\]\[\e[$COLON_COLOR\]:\[\033[01;32m\]\w\[\033[00m\]\\[\033[01;33m\]\$\[\033[00m\] "`
これはシェルプロンプトではありませんが、あなたが求めているものの精神に合うかもしれないカスタマイズです。
次の環境変数を設定しました。
if [ -z "$PROMPT_COMMAND" ]; then
export PROMPT_COMMAND='history -a'
else
export PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
fi
このようにして、画面などで複数の端末を開いている場合でも、互いの変更が変化しても履歴が失われることはありません。
export PS1="\[`if [[ $? = 0 ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi`:\w\n$ "
これは表示します:
hostname:~
$
最後に実行されたコマンドの戻りコードが「0」の場合は緑色で「hostname」、>「0」の場合は赤色で表示されます。
私が好きなバッシュについて
PS1 = "\ h \ d \ t \ w \ n \ u>"
その結果:
myserver Mon Sep 07 07:43:11 / u08
root>
そのため、プロンプトで、ホスト名、日付と時刻、完全パス、ユーザー名を新しい行で取得します。これは、ディレクトリ内の深い行の折り返しを最小限にするためです。私は一日中箱に出入りしているので、それをまっすぐに保つためにできることはすべて良いことです。私はまたすべてを記録するためにパテをセットしました。私は戻ってログを見て、いつ何をしていたかを正確に見ることができます。複数の端末ウィンドウで一連のイベントを一度に把握するのにも便利です。
私のzshプロンプト:
[andrew@hostname ~]%
通常は赤と白で、現在のディレクトリはピンクです。ルートの場合、濃い灰色でホスト名が赤になります。$?
が0でない場合、最後の%は赤で表示されます。
function precmd {
ERR=$?
if [ $UID -eq 0 ]; then
MYPROMPT="$(print '%{\e[1;30m%}[%{\e[0m%}')$(print '%{\e[1;31m%}%n%{\e[0m%}')@$(print '%{\e[1;31m%}%m%{\e[0m%}') $(print '%{\e[1;35m%}%3c%{\e[0m%}')$(print '%{\e[1;30m%}]%{\e[0m%}')"
else
MYPROMPT="[$(print '%{\e[1;31m%}%n%{\e[0m%}')@%m $(print '%{\e[1;35m%}%3c%{\e[0m%}')]"
fi
if [ $ERR -ne 0 ]; then
ERROR="$(print '%{\e[1;31m%}%#%{\e[0m%}') "
export PS1=$MYPROMPT$ERROR
else
export PS1="$MYPROMPT%# "
fi
export RPS1=""
}