GNU/Linux >> Linux の 問題 >  >> Linux

カスタム zshrc で zsh を起動します

マニュアルページから:

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 を設定できるはずです

マニュアルページが示唆するように、 RCSGLOBAL_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 のデフォルト値です .


Linux
  1. ディレクトリ付きの猫ファイル?

  2. レンジャーで特定のフォルダ内のファイルを並べ替えますか?

  3. タイムゾーンで開始時間を処理しますか?

  1. Zshの使用を開始する

  2. Linuxでgocryptfsを使用してファイルを暗号化する方法

  3. で始まるが含まないファイルを削除する

  1. rsyncを使用してファイルをバックアップします

  2. PDF ファイルの最適化 (Ghostscript などを使用)

  3. Docker コマンドがハングアップし、応答がありません