私はちょうどtcsh
からbash
に移動しました。特に、%c02
(ellipsis
も設定されています)を使用してディレクトリ短縮プロンプトオプションを見落としました。Bashプロンプト短縮
PROMPT_DIRTRIM
はほぼ正しいことをしています(省略記号は除きます)が、私はbash
3(OS X)にしかありません。私はthis recipe elsewhere on SOを見つけました。これは全長が短くなるため、ディレクトリの途中でパス名が壊れてしまいました。私は好きではありませんでした。
だから私はこの思い付いた:
PROMPT_DIRTRIM=2 ## from bash4, but used here
dirtrim()
{
local NAME="$1" start= endelts=
[[ "$NAME" =~ ^"$HOME"(/|$) ]] && NAME="~${NAME#$HOME}" ## $HOME ==> ~
IFS=/ read -ra elts <<< "$NAME"; ## split $PWD on "/"
start=$((${#elts[@]}-${PROMPT_DIRTRIM})) ## first element to retain
if [ ${start} -gt 1 ]; then
for ((i=${start}; i<${#elts[@]}; i++)); do
endelts="${endelts}/${elts[$i]}"; ## concat together the trailing path
done
NAME="...${endelts}"
fi
echo "$NAME"
}
PS1='\h:$(dirtrim "$PWD")\$ '
それは動作します:
blackat:~$ cd ~/Library/Application\ Support/Apple
blackat:.../Application Support/Apple$
しかし、私は
bash
に新しめと明示的
for (())
ループに不満です。しかし、私は、
elts
分割の最後のエントリにdir名のスペースを正しく扱う方法で再結合する方法を見つけることができませんでした(例えば、
${elts[@]:${start}}
を使用)。それを行うためのヒントやその他の改善点はありますか?
(ちなみに、私は....このがbash
は、プログラミング言語であるという程度にプログラミングの質問、だと思う)
Bashはプログラミング言語です。 –
@Jonathan Leffler:合意しました - それは、2票の投票に応えて終了しました! –
そして、私はBashプログラミングに関する質問がプログラミングの質問であることを肯定しているので、Stack Overflowでトピックに載っています。シェルプログラミングに関する話題をオフトピックとしてクローズすることは、以前は大きな問題でした。最近、私はそれが起こっているとは思わないが、それは単に私がそれを逃していることを意味するかもしれません、そして、それはいつも起こります。FWIW:私は長いプロンプトが好きではありません:私はプロンプトにパスを含めません。マシンの 'sphinx'では、私のプロンプトは 'Sphinx JL:'です。 Mac端末では、ターミナルのタイトルバーにパスを置くことができます(プロパティ - >ウィンドウとタイトルセクションを参照)。 –