長いパスでXtermのタイトルを設定する

長いパスでXtermのタイトルを設定する

私の.profileには次のコードがあります。

case $TERM in
    xterm*)
        HOST=`hostname`
        PS1='^[]0;${USER}@${HOST}: ${PWD}^Gksh$ '
        ;;
    *)
        PS1='ksh$ '
        ;;
esac

この方法は、パスが長すぎない限りうまく機能します。同様の操作を実行しますが、.../<end of the path>パスが長いときに機能するようにマークする他の方法はありますか?

ベストアンサー1

これには、最終目標に応じて2つのオプションがあります。

末尾のディレクトリ要素のみを表示

PS1='^[]0;${USER}@${HOST}: ${PWD##*/}^Gksh$ '

これは単純に##既存のPS1にパラメータ置換を導入し、最後のスラッシュまで文字を貪欲に削除します。PWDこれにより、長さに関係なくPS1プロンプト文字列の一部が短縮されます。

長いPWD文字列のみを短くしてください。

完全に公開された、私はこのスタックオーバーフローの質問に対する答えの1つからこの「本」を得ました。

ホスト名と現在のディレクトリを表示するようにKornShellの表示プロンプトをどのようにカスタマイズできますか?

...そしてそれに応じて修正してください。簡単に言えば、cd内部関数のエイリアスです。この関数は元のcd動作をシミュレートしますが、新しいPS1プロンプトを決定するために文字列「数学」を実行します。あなたの質問を文字通り受け入れたので、長いディレクトリ名の前に「...」を付けたくない場合は、そのP=...行からその文字列を削除し、+3その上の数学行から削除してください。

function _cd {
   directory=$1
   pattern=$2

   # First cd to the directory
   if [ "$pattern" ]
   then
       \cd "$directory" "$pattern"
   elif [ "$directory" ]
   then
       \cd "$directory"
   else
       \cd
   fi

   # set this value to taste
   MAXLEN=20
   LEN=${#PWD}
   P=$PWD
   # if PWD is "too" long, trim it
   if [ $LEN -gt $MAXLEN ]
   then
     # the 3 is for the literal "..."
     START=$(( LEN - MAXLEN + 3 ))
     P="..."$(echo $PWD | cut -c ${START}-)
   fi
   PS1="^[]0;${USER}@${HOST}: $P^Gksh\$ "
}

alias cd="_cd"

もちろん、この記事を書くとき、私は3番目のオプションを念頭に置いていました。つまり、エイリアス/組み込み関数コードを使用しますが、cut文字列##の代わりにパラメータ置換を使用して、表示された最初の例のようにディレクトリ要素を削除します。

おすすめ記事