「どのプロンプト」が提供する機能はどこで定義されていますか?

「どのプロンプト」が提供する機能はどこで定義されていますか?

私は "stuff"を使うときに呼び出されるファイルを見つけるために "which stuff"を使うのに慣れています。 「あるプロンプト」への回答を見て驚きました。

prompt () {
        local prompt_opts
        set_prompt "$@"
        (( $#prompt_opts )) && setopt noprompt{bang,cr,percent,subst} "prompt${^prompt_opts[@]}"
        true
}

私のArchlinuxシステムで。これはどこから来て、現在構築されているchroot環境でプロンプトコマンドを使用できるようにするにはどうすればよいですか? (私は他のコマンドをコピーしました...ここでは動作しません=))

編集する:私はzshをシェルとして使用しています。たぶんこれは何かが変わるかもしれません。

答え1

実行時に取得するコマンドはwhichという関数ですprompt。出力は定義です。

次のコマンドを使用して表示することもできます。

$ declare -f prompt

プロンプト()関数はどこにありますか?

これは少しトリッキーです。grep" "文字列を見つけるなどのツールを使用する必要がありますprompt ()。一般的に見なければならない場所は次のとおりです。

強く打つ

(メモ:whichBashで使用typeする代わりに)

$ grep -R "prompt ()" .bashrc .bash_profile /etc/bashrc /etc/profile*

扱いにくい

$ grep -R "prompt ()" <files>

zshマニュアルページで使用されるファイルは次のとおりです。

   $ZDOTDIR/.zshenv
   $ZDOTDIR/.zprofile
   $ZDOTDIR/.zshrc
   $ZDOTDIR/.zlogin
   $ZDOTDIR/.zlogout
   ${TMPPREFIX}*   (default is /tmp/zsh*)
   /etc/zshenv
   /etc/zprofile
   /etc/zshrc
   /etc/zlogin
   /etc/zlogout    (installation-specific - /etc is the default)

次のいずれかの場所に配置する必要があります。これらの場所のいずれにも表示されない場合は、検索範囲を広げる必要があります。文字列 " prompt"だけを探すことをお勧めします。

答え2

promptset_promptそれ自体は役に立ちません。また、必要な(およびすべての依存関係)という別の関数を呼び出します。

最初に見つけなければならないのは自動ロードされた機能です。

print -rl $fpath/prompt(N)

これに加えて、初期化ファイルと関数ロードパスのファイルから関数定義を取得します。

grep -E '^ *function +prompt($|[^0-9A-Z_a-z])|^ *prompt *\(' ~/.z* /etc/zsh/*(.N) /etc/z*(.N) $fpath/*(.)

このprompt関数の定義は…/Prompts/promptinit次のとおりです。プロンプトのトピック要素また、選択したプロンプトテーマのファイルpromptinitも必要です。選択したプロンプトトピック(関数呼び出し)をprompt_*_setup表示します。~/.zshrcprompt

関連情報