Quiero poder iniciar zsh con un archivo rc personalizado similar al comando: bash --rc-file /path/to/file
Si esto no es posible, ¿es posible iniciar zsh, ejecutar source /path/to/file
y luego permanecer en la misma sesión de zsh?
Nota: El comando zsh --rcs /path/to/file
no funciona, al menos no para mí ...
EDITAR: En su totalidad, deseo poder hacer lo siguiente:
ssh
a un servidor remoto "example.com", ejecutar zsh
, source
mi configuración ubicada en /path/to/file
, todo en 1 comando. Aquí es donde tuve problemas, especialmente porque prefiero no escribir sobre ningún archivo de configuración en la máquina remota.
code as such
!Respuestas:
De las páginas del manual:
por lo que debería poder establecer la variable de entorno
ZDOTDIR
en un nuevo directorio para que zsh busque un conjunto diferente de archivos de puntos.Como sugiere la página del manual,
RCS
yGLOBAL_RCS
no son rutas a archivos rc, ya que está intentando utilizarlos, sino más bien opciones que puede habilitar o deshabilitar. Entonces, por ejemplo, la bandera--rcs
habilitará laRCS
opción, causando que zsh lea de los archivos rc. Puede usar los siguientes indicadores de línea de comandos para zsh para habilitar o deshabilitarRCS
oGLOBAL_RCS
:Para responder a su otra pregunta:
Sí, esto es bastante fácil de acuerdo con las instrucciones anteriores. Solo corre
zsh -d -f
y luegosource /path/to/zshrc
.fuente
zsh -d -f; source /path/to/file
nunca ejecuta el segundo comando en la primera sesión de zsh hasta que sale.ssh
a un servidor remoto "example.com", ejecutezsh
,source
mi configuración ubicada en/path/to/file
, todo en 1 comando. Aquí es donde tuve problemas, especialmente porque prefiero no escribir sobre ningún archivo de configuración en la máquina remota. Gracias por tu respuesta sin embargo!ssh host "zsh -d -f; source /path/to/file"
, ssh se ejecutará primerozsh
en el host remoto, luego,source ...
después de que salga el shell zsh. En cambio, lo que desea hacer esssh -t host zsh -d -f
colocarlo en un shell interactivo en el host remoto, o si no quiere un shell interactivo, hágalossh host zsh -d -f -c \"source /path/to/file\; other command\; ... \"
.ssh -t host "zsh -d -f; source /path/to/file
me deja en unzsh
shell interactivo (y estéril) .ssh -t host "zsh -d -f; source /path/to/file"
, el comandosource...
NO se ejecuta dentro del shell zsh. Se ejecuta en su shell de inicio de sesión después de que se cierra el shell zsh. Para probar esto, corressh host "zsh; echo foo"
. Verá la salida "foo" después de salir del shell zsh.mientras que con ZDOTDIR, puede indicar
zsh
que interprete un archivo llamado.zshrc
en cualquier directorio de su elección, hacer que interprete cualquier archivo de su elección (no necesariamente llamado.zshrc
) resulta bastante difícil.En
sh
oksh
emulación,zsh
evalúa$ENV
; para que puedas agregaremulate zsh
en la parte superior de tu/path/to/file
y hacer:Otro enfoque muy complicado puede ser:
Ese merece un poco de explicación.
${foo::=value}
es una expansión variable que realmente establece$foo
.$functions
es una matriz asociativa especial que asigna nombres de funciones a sus definiciones.Con la
promptsubst
opción, las variables$PS1
se expanden. Entonces, en el primer aviso, las variables en esa PS1 se expandirán.La
zsh_directory_name
función es una función especial que ayuda a expandir ay~foo
al/path/to/something
revés. Que se utiliza, por ejemplo, con%~
la pronta por lo que si el directorio actual es/opt/myproj/proj/x
que puede mostrarlo como~proj:x
por tenerzsh_directory_name
hacer el mapeoproj:x
<=>/opt/myproj/proj/x
. Eso también lo usa laD
bandera de expansión de parámetros. Entonces, si uno se expande${(D)somevar}
, esazsh_directory_name
función se llamará.Aquí, estamos usando
${(D):-}
,${:-}
que se${no_var:-nothing}
expande anothing
si$no_var
está vacío, por lo que se${(D):-}
expande a nada mientras se llamazsh_directory_name
.zsh_directory_name
se ha definido previamente como:Es decir, en la primera expansión de PS1 (en el primer aviso),
${(D):-}
hará que lapromptsubst
opción se desactive (para cancelar-o promptsubst
),zsh_directory_name()
que no esté definida (ya que queremos ejecutarla solo una vez),$PS1
que no se establezca y/path/to/file
que se obtenga.${PS1=%m%# }
se expande (y se asigna$PS1
) a%m%#
menos que PS1 ya esté definido (por ejemplo,/path/to/file
después deunset
), y%m%#
resulta ser el valor predeterminado dePS1
.fuente