GNU/Linux >> Tutoriels Linux >  >> Linux

Démarrer zsh avec un zshrc personnalisé

À partir des pages de manuel :

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.

vous devriez donc pouvoir définir la variable d'environnement ZDOTDIR dans un nouveau répertoire pour que zsh recherche un autre ensemble de fichiers de points.

Comme le suggère la page de manuel, RCS et GLOBAL_RCS ne sont pas des chemins d'accès aux fichiers rc, car vous essayez de les utiliser, mais plutôt des options que vous pouvez activer ou désactiver. Ainsi, par exemple, le drapeau --rcs activera le RCS option, obligeant zsh à lire à partir des fichiers rc. Vous pouvez utiliser les indicateurs de ligne de commande suivants pour zsh pour activer ou désactiver RCS ou GLOBAL_RCS :

  --globalrcs
  --rcs
  -d    equivalent to --no-globalrcs
  -f    equivalent to --no-rcs

Pour répondre à votre autre question :

est-il possible de démarrer zsh, d'exécuter "source /path/to/file", puis de rester dans la même session zsh ?

Oui, c'est assez facile selon les instructions ci-dessus. Exécutez simplement zsh -d -f puis source /path/to/zshrc .


tandis qu'avec ZDOTDIR, vous pouvez dire zsh pour interpréter un fichier nommé .zshrc dans n'importe quel répertoire de votre choix, en lui faisant interpréter n'importe quel fichier de votre choix (pas nécessairement appelé .zshrc ) s'avère assez difficile.

En sh ou ksh émulation, zsh évalue $ENV; vous pouvez donc ajouter emulate zsh en haut de votre /path/to/file et faites :

ssh -t host 'zsh -c "ARGV0=sh ENV=/path/to/file exec zsh"'

Une autre approche très compliquée pourrait être :

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

Celui-là mérite une petite explication.

${foo::=value} est une extension de variable qui définit $foo . $functions est un tableau associatif spécial qui associe les noms de fonctions à leurs définitions.

Avec le promptsubst option, variables en $PS1 sont élargis. Ainsi, à la première invite, les variables de cette PS1 seront développées.

Le zsh_directory_name function est une fonction spéciale qui aide à développer le ~foo à /path/to/something et l'inverse. C'est utilisé par exemple avec %~ dans l'invite de sorte que si le répertoire courant est /opt/myproj/proj/x vous pouvez l'afficher sous la forme ~proj:x en ayant zsh_directory_name faire le mapping proj:x <=> /opt/myproj/proj/x . C'est aussi utilisé par le D indicateur d'extension de paramètre. Donc, si l'on développe ${(D)somevar} , que zsh_directory_name la fonction sera appelée.

Ici, nous utilisons ${(D):-} , ${:-} , soit ${no_var:-nothing} se développe en nothing si $no_var est vide, donc ${(D):-} se développe à rien lors de l'appel zsh_directory_name . zsh_directory_name a été précédemment défini comme :

zsh_directory_name() {
  set +o promptsubst
  unset -f zsh_directory_name
  unset PS1; . /path/to/file
}

Autrement dit, lors de la première extension PS1 (à la première invite), ${(D):-} provoquera le promptsubst option à désactiver (pour annuler le -o promptsubst ), zsh_directory_name() être indéfini (car nous ne voulons l'exécuter qu'une seule fois) $PS1 à désactiver, et /path/to/file à sourcer.

${PS1=%m%# } développe (et attribue $PS1 ) à %m%# sauf si PS1 était déjà défini (par exemple par /path/to/file après le unset ), et %m%# se trouve être la valeur par défaut de PS1 .


Linux
  1. Premiers pas avec Zsh

  2. Fichiers Cat avec répertoire ?

  3. Heure de début du processus avec fuseau horaire ?

  4. Sauvegardez vos fichiers avec rsync

  5. Commandes Docker suspendues sans réponse

Créer des fichiers de taille personnalisée sous Linux

Premiers pas avec la commande Tar

Comment télécharger des fichiers avec FileZilla

Télécharger des fichiers avec Monsta FTP

Commande lsof sous Linux avec exemples

Commande comm Linux avec exemples