マニュアルページから:
STARTUP/SHUTDOWN FILES
Commands are first read from /etc/zshenv; this cannot be overridden. Subsequent be‐
haviour is modified by the RCS and GLOBAL_RCS options; the former affects all startup
files, while the second only affects global startup files (those shown here with an
path starting with a /). If one of the options is unset at any point, any subsequent
startup file(s) of the corresponding type will not be read. It is also possible for
a file in $ZDOTDIR to re-enable GLOBAL_RCS. Both RCS and GLOBAL_RCS are set by
default.
Commands are then read from $ZDOTDIR/.zshenv. If the shell is a login shell, com‐
mands are read from /etc/zprofile and then $ZDOTDIR/.zprofile. Then, if the shell is
interactive, commands are read from /etc/zshrc and then $ZDOTDIR/.zshrc. Finally, if
the shell is a login shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.
When a login shell exits, the files $ZDOTDIR/.zlogout and then /etc/zlogout are read.
This happens with either an explicit exit via the exit or logout commands, or an
implicit exit by reading end-of-file from the terminal. However, if the shell termi‐
nates due to exec'ing another process, the logout files are not read. These are also
affected by the RCS and GLOBAL_RCS options. Note also that the RCS option affects
the saving of history files, i.e. if RCS is unset when the shell exits, no history
file will be saved.
If ZDOTDIR is unset, HOME is used instead. Files listed above as being in /etc may
be in another directory, depending on the installation.
As /etc/zshenv is run for all instances of zsh, it is important that it be kept as
small as possible. In particular, it is a good idea to put code that does not need
to be run for every single shell behind a test of the form `if [[ -o rcs ]]; then
...' so that it will not be executed when zsh is invoked with the `-f' option.
環境変数 ZDOTDIR
を設定できるはずです
マニュアルページが示唆するように、 RCS
と GLOBAL_RCS
使用しようとしている rc ファイルへのパスではなく、有効または無効にできるオプションです。たとえば、フラグ --rcs
RCS
を有効にします オプションで、zsh が rc ファイルから読み取るようにします。次のコマンドライン フラグを zsh に使用して、RCS
を有効または無効にすることができます。 または GLOBAL_RCS
:
--globalrcs
--rcs
-d equivalent to --no-globalrcs
-f equivalent to --no-rcs
他の質問に答えるには:
<ブロック引用>zsh を開始し、「source /path/to/file」を実行してから、同じ zsh セッションにとどまることは可能ですか?
はい、上記の指示に従って、これは非常に簡単です。 zsh -d -f
を実行するだけです そして source /path/to/zshrc
.
ZDOTDIR では、zsh
を伝えることができます .zshrc
というファイルを解釈するには 選択した任意のディレクトリで、選択した任意のファイルを解釈します (必ずしも .zshrc
と呼ばれる必要はありません) ) は非常に難しいことがわかります。
sh
で または ksh
エミュレーション、zsh
$ENV
を評価します; emulate zsh
を追加できます /path/to/file
の先頭に
ssh -t host 'zsh -c "ARGV0=sh ENV=/path/to/file exec zsh"'
もう 1 つの非常に複雑なアプローチは次のとおりです。
ssh -t host 'PS1='\''${${functions[zsh_directory_name]::="
set +o promptsubst
unset -f zsh_directory_name
unset PS1
. /path/to/file
"}+}${(D):-}${PS1=%m%# }'\' exec zsh -o promptsubst -f
それは少し説明する価値があります.
${foo::=value}
実際にセットする変数展開です $foo
. $functions
関数名をその定義にマップする特別な連想配列です。
promptsubst
で オプション、$PS1
の変数 展開されます。したがって、最初のプロンプトで、その PS1 の変数が展開されます。
zsh_directory_name
function は ~foo
の展開を助ける特別な関数です /path/to/something
まで そしてその逆。これは、たとえば %~
で使用されます プロンプトで、現在のディレクトリが /opt/myproj/proj/x
の場合 ~proj:x
として表示できます zsh_directory_name
を持つことで マッピング proj:x
を行います <=> /opt/myproj/proj/x
. D
でも使用されています パラメータ展開フラグ。 ${(D)somevar}
を展開すると 、その zsh_directory_name
関数が呼び出されます。
ここでは、${(D):-}
を使用しています。 、 ${:-}
、つまり ${no_var:-nothing}
です nothing
に展開されます $no_var
の場合 は空なので、${(D):-}
zsh_directory_name
の呼び出し中に何も展開されません . zsh_directory_name
以前は次のように定義されていました:
zsh_directory_name() {
set +o promptsubst
unset -f zsh_directory_name
unset PS1; . /path/to/file
}
つまり、最初の PS1 拡張時 (最初のプロンプト時)、${(D):-}
promptsubst
が発生します 設定を解除するオプション (-o promptsubst
をキャンセルするため) )、zsh_directory_name()
未定義 (一度だけ実行したいため) $PS1
未設定、および /path/to/file
${PS1=%m%# }
展開します (そして $PS1
を割り当てます) ) から %m%#
PS1 がすでに定義されていない限り (たとえば、/path/to/file
によって) unset
の後 )、および %m%#
たまたま PS1
のデフォルト値です .