コマンドの実行日を表示しようとしています。したがって、ここに示すPS4 bash環境変数を使用します
PS1="[\u@\h \W]\\$ "
PS4=:\D{%F %T}: ; set -x
次のプロンプトが表示されます
[user@host temp]$ \ls
:2012-04-10 13:43:52: ls
dir1 dir12 test
[user@host temp]$
一方、深いディレクトリにいるときは、パスが長すぎないようにしたいと考えています (非常によくあることです)。次のコードを見つけました (場所は覚えていません)。これは非常に優れています。
bash_prompt_command() {
# How many characters of the $PWD should be kept
local pwdmaxlen=25
# Indicate that there has been dir truncation
local trunc_symbol=".."
local dir=${PWD##*/}
pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen ))
NEW_PWD=${PWD/#$HOME/\~}
local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen ))
if [ ${pwdoffset} -gt "0" ]
then
NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
fi
}
PS1="[\u@\h \${NEW_PWD}]\\$ "
PROMPT_COMMAND=bash_prompt_command
それは私に次のことを与えます
[user@host semishort_path]$
PS4とPROMPT_COMMANDの両方を使用すると問題が発生し、その恐ろしいことが起こります:
[user@host temp]$ \ls
:2012-04-10 13:48:32: ls
dir1 dir12 test
::2012-04-10 13:48:32: bash_prompt_command
::2012-04-10 13:48:32: local pwdmaxlen=25
::2012-04-10 13:48:32: local trunc_symbol=..
::2012-04-10 13:48:32: local dir=temp
::2012-04-10 13:48:32: pwdmaxlen=25
::2012-04-10 13:48:32: NEW_PWD='~/temp'
::2012-04-10 13:48:32: local pwdoffset=-19
::2012-04-10 13:48:32: '[' -19 -gt 0 ']'
[user@host temp]$
PROMPT_COMMAND機能で使用するコマンドをPS4で表示。
この影響を回避する方法を探しています:
- プロンプト(PS1またはPROMPT_COMMAND)にリアルタイム(同じプロンプトラインで毎秒更新)を表示することにより
- パスの長さを減らす別の方法を見つけます (~ にいないときに、最後の 2 つのディレクトリを出力する必要があります)。
- 多分他のアイデア???
これがトリッキーな問題であることはわかっていますが、BASH は自分のやりたいことができるはずです。