私は初めてbashに触れ、私のプロンプトがtcshでマイナーなものを見せることを望みましたが、良いGoogle検索の後でもまだできません。
次のように、プロンプトに現在のディレクトリと親ディレクトリのみを含めたいと思います。
/parent/currentdir $
tcsh では、次のことでこれを実現します。
set prompt = "%C2 %"
しかし、これまでbashは、同じ出力を得るためにpwdを解析する必要があるという事実だけを見つけました。
次のような簡単な方法はありませんか?
export PS1="$(some_command) $"
答え1
バッシュタイムリーな制御特性はかなり静的です。さらに制御したい場合は、プロンプトに変数を含めることができます。promptvars
オプション。
PS1='${PWD#"${PWD%/*/*}/"} \$ '
一重引用符に注意してください。変数拡張は、PS1
変数が定義されるのではなく、プロンプトが表示されたときに発生する必要があります。
表示される内容をより細かく制御するには、コマンド置換を使用できます。たとえば、上記のコードスニペットには~
ホームディレクトリの略語はありません。
PS1='$(case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac; printf %s "$HPWD") \$ '
このコードは非常に面倒なので、PS1
次のように使用できます。PROMPT_COMMAND
変えるコードを実行して設定し、HPWD
プロンプトで使用します。
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD \$'
短縮プロンプトはディレクトリが変更されたときにのみ変更されるため、プロンプトが表示されるたびに再計算する必要はありません。 Bashは現在のディレクトリが変更されたときに実行されるフックを提供しませんが、次のことができます。シミュレーションしてみてください書き直し、cd
そのいとこ。
cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac
}
PS1='$HPWD \$'
PS1
環境変数ではなくシェル設定なので、エクスポートする必要もなく、エクスポートしないでください。PS1
他のシェルは bash 設定を理解できません。
PS良いインタラクティブシェル体験をしたい場合は、次のように切り替えてください。扱いにくい、すべて(プロンプト%
拡張には主にtcshchpwd
などが含まれます)基本機能です。
PS1='%2~ %# '
答え2
設定はPROMPT_DIRTRIM=2
必要なものでなければなりません。
答え3
答え4
export PROMPT_DIRTRIM=2
bashファイルに追加すると、最新バージョンのbash(v. 4+)に対してこれが行われます。特に、これは環境変数\w
の項目の外観をフルパスPS1
から最後の2つの項目に変更します。
最終結果は次のとおりです。../Documents/MyFolder