GNU/Linux >> Tutoriales Linux >  >> Linux

Inicie zsh con un zshrc personalizado

De las páginas man:

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.

por lo que debería poder establecer la variable de entorno ZDOTDIR a un nuevo directorio para que zsh busque un conjunto diferente de archivos de puntos.

Como sugiere la página man, RCS y GLOBAL_RCS no son rutas a archivos rc, ya que está intentando usarlos, sino opciones que puede habilitar o deshabilitar. Entonces, por ejemplo, la bandera --rcs habilitará el RCS opción, lo que hace que zsh lea desde archivos rc. Puede usar los siguientes indicadores de línea de comandos para activar o desactivar RCS o GLOBAL_RCS :

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

Para responder a su otra pregunta:

¿Es posible iniciar zsh, ejecutar "fuente/ruta/al/archivo" y luego permanecer en la misma sesión de zsh?

Sí, esto es bastante fácil de acuerdo con las instrucciones anteriores. Solo ejecuta zsh -d -f y luego source /path/to/zshrc .


mientras que con ZDOTDIR, puedes decirle a zsh para interpretar un archivo llamado .zshrc en cualquier directorio de su elección, haciendo que interprete cualquier archivo de su elección (no necesariamente llamado .zshrc ) resulta bastante difícil.

En sh o ksh emulación, zsh evalúa $ENV; por lo que podría agregar emulate zsh en la parte superior de tu /path/to/file y hacer:

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

Otro enfoque muy complicado podría ser:

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

Ese merece un poco de explicación.

${foo::=value} es una expansión variable que en realidad establece $foo . $functions es una matriz asociativa especial que asigna nombres de funciones a sus definiciones.

Con el promptsubst opción, variables en $PS1 se expanden. Entonces, en el primer aviso, las variables en esa PS1 se expandirán.

El zsh_directory_name función es una función especial que ayuda a expandir el ~foo a /path/to/something y al revés Eso se usa, por ejemplo, con %~ en el aviso para que si el directorio actual es /opt/myproj/proj/x puedes mostrarlo como ~proj:x al tener zsh_directory_name hacer el mapeo proj:x <=> /opt/myproj/proj/x . Eso también lo usa el D indicador de expansión de parámetros. Entonces, si uno expande ${(D)somevar} , que zsh_directory_name se llamará a la función.

Aquí, estamos usando ${(D):-} , ${:-} , eso es ${no_var:-nothing} se expande a nothing si $no_var está vacío, entonces ${(D):-} se expande a nada mientras llama a zsh_directory_name . zsh_directory_name se ha definido previamente como:

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

Es decir, en la primera expansión de PS1 (en el primer aviso), ${(D):-} causará el promptsubst opción a desarmar (para cancelar el -o promptsubst ), zsh_directory_name() ser indefinido (ya que queremos ejecutarlo solo una vez) $PS1 para ser desarmado, y /path/to/file para ser fuente.

${PS1=%m%# } expande (y asigna $PS1 ) a %m%# a menos que PS1 ya estuviera definido (por ejemplo, por /path/to/file después del unset ) y %m%# pasa a ser el valor predeterminado de PS1 .


Linux
  1. Comenzando con Zsh

  2. Cómo cifrar archivos con gocryptfs en Linux

  3. ¿Archivos Cat con directorio?

  4. ¿Ordenar archivos en una carpeta específica con Ranger?

  5. ¿Hora de inicio del proceso con zona horaria?

Crear archivos de tamaño personalizado en Linux

Primeros pasos con el comando Tar

Cómo subir archivos con FileZilla

Subir archivos con Monsta FTP

Comando lsof en Linux con ejemplos

Comando Linux comm con ejemplos