1

私はいくつかの特定の目的のためにシェルスクリプトを使用しており、それが持っている機能は関連しています.bash_profile:

function refresh {
    source "$HOME/.bash_profile"
}

それと同じ.bash_profileように、次のステートメントがあります。

if [ -f "$HOME/.bash_prompt" ]; then
    source "$HOME/.bash_prompt"
fi

どちらもリロードする必要があり.bash_promptます。そのプロンプト ファイルには、プロンプトの表示 (色、テキストの配置など) を変更する必要がある値が含まれていますが、それらの値は変更されません。それらは、新しいターミナル ウィンドウでのみ、またはターミナル ウィンドウ内で明示的に呼び出した場合にのみ変更されsource "$HOME/.bash_prompt"ます。

ここで何か間違ったことをしていますか?

ここに私の.bash_prompt情報源があります:

# Colors
# Bunch of color codes

function print_before_the_prompt {

    # create a $fill of all screen width
    let fillsize=${COLUMNS}
    fill=""
    while [ "$fillsize" -gt "0" ]
    do
    fill="-${fill}" # fill with underscores to work on
    let fillsize=${fillsize}-1
    done

    printf "$txtrst$bakwht%s" "$fill"
    printf "\n$bldblk%s%s\n" "${PWD/$HOME/~}" "$(__git_ps1 "$txtrst [$txtblu%s$txtrst]")"

}

# Load Git completion and prompt
if [ -f "/usr/local/opt/git/etc/bash_completion.d/git-completion.bash" ]; then
    source "/usr/local/opt/git/etc/bash_completion.d/git-completion.bash"
fi
if [ -f "/usr/local/opt/git/etc/bash_completion.d/git-prompt.sh" ]; then
    source "/usr/local/opt/git/etc/bash_completion.d/git-prompt.sh"
fi

GIT_PS1_SHOWDIRTYSTATE=true
PROMPT_COMMAND=print_before_the_prompt
PS1="\[$txtred\]⦿\[$txtrst\] "
4

1 に答える 1

5

refreshまた、関数を実行する代わりに、関数をホストするスクリプトをソースする必要があります。これを行わないと、環境はスクリプトの実行中にのみ変更されます。

説明: スクリプトを実行すると、スクリプトは親の現在の環境 (この場合はシェル) を継承し、独自の環境が与えられます。スクリプト内のすべての環境変更は、スクリプト自体とその子にのみ適用されます。

ただし、スクリプトをソースすると、すべての変更とコマンドが親の環境に直接影響します。

一般に、ソースとして使用することを目的としたスクリプトは、汎用スクリプトに分離しておくことをお勧めします。たとえば、dev.shいくつかの特別な変数を必要とする特定の開発プロジェクト用の特別な環境変数を含むファイルを作成できます。

.bash_profile現在のシェルのソースをすばやく取得する方法が必要な場合は、エイリアスを設定できます。スクリプトを実行してそれを行うことは不可能です。

于 2013-01-01T14:28:12.383 に答える