Je veux pouvoir démarrer zsh avec un fichier rc personnalisé similaire à la commande: bash --rc-file /path/to/file
Si ce n'est pas possible, est-il possible de démarrer zsh, d'exécuter source /path/to/file
, puis de rester dans la même session zsh?
Remarque: La commande zsh --rcs /path/to/file
ne fonctionne pas, du moins pas pour moi ...
EDIT: Dans son intégralité, je souhaite pouvoir faire ce qui suit:
ssh
sur un serveur distant "example.com", exécutez zsh
, source
ma configuration se trouvant sur /path/to/file
, all in 1 command. C'est là que j'ai eu du mal, surtout parce que je préfère ne pas écraser les fichiers de configuration sur la machine distante.
code as such
!Réponses:
Depuis les pages de manuel:
vous devriez donc être en mesure de définir la variable d'environnement
ZDOTDIR
dans un nouveau répertoire pour que zsh recherche un ensemble différent de fichiers dot.Comme le suggère la page de manuel,
RCS
etGLOBAL_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, l'indicateur--rcs
activera l'RCS
option, provoquant la lecture de zsh à partir des fichiers rc. Vous pouvez utiliser les drapeaux de ligne de commande suivants pour zsh pour activer ou désactiverRCS
ouGLOBAL_RCS
:Pour répondre à votre autre question:
Oui, c'est assez facile selon les directions ci-dessus. Courez
zsh -d -f
et ensuitesource /path/to/zshrc
.la source
zsh -d -f; source /path/to/file
n'exécute jamais la deuxième commande dans la première session de zsh jusqu'à la fermeture.ssh
sur un serveur distant "example.com", exécutezzsh
,source
ma configuration se trouvant dans/path/to/file
, commande tout en 1. C'est là que j'ai eu du mal, surtout parce que je préfère ne pas écraser les fichiers de configuration sur la machine distante. Merci pour votre réponse!ssh host "zsh -d -f; source /path/to/file"
, ssh s'exécutera d'abordzsh
sur l'hôte distant, puissource ...
après la fermeture du shell zsh. Au lieu de cela, ce que vous voulez faire estssh -t host zsh -d -f
de déposer dans un shell interactif sur l'hôte distant, ou si vous ne voulez pas de shell interactif, faites-lessh host zsh -d -f -c \"source /path/to/file\; other command\; ... \"
.ssh -t host "zsh -d -f; source /path/to/file
me laisse tomber dans unzsh
shell interactif (et stérile) .ssh -t host "zsh -d -f; source /path/to/file"
, la commandesource...
n'est PAS exécutée à l'intérieur du shell zsh. Il est exécuté dans votre shell de connexion après la fermeture du shell zsh. Pour tester cela, exécutezssh host "zsh; echo foo"
. Vous verrez la sortie "foo" après avoir quitté le shell zsh.tandis qu'avec ZDOTDIR, vous pouvez dire
zsh
d'interpréter un fichier appelé.zshrc
dans n'importe quel répertoire de votre choix, le faire interpréter n'importe quel fichier de votre choix (pas nécessairement appelé.zshrc
) s'avère assez difficile.Dans
sh
ouksh
émulation,zsh
évalue$ENV
; afin que vous puissiez ajouteremulate zsh
en haut de votre page/path/to/file
et faire:Une autre approche très compliquée pourrait être:
Celui-là mérite un peu d'explication.
${foo::=value}
est une expansion variable qui définit réellement$foo
.$functions
est un tableau associatif spécial qui mappe les noms de fonction à leurs définitions.Avec l'
promptsubst
option, les variables dans$PS1
sont développées. Ainsi, à la première invite, les variables de cette PS1 seront développées.La
zsh_directory_name
fonction est une fonction spéciale qui permet d'étendre le~foo
vers/path/to/something
et l'inverse. Cela est utilisé par exemple avec%~
dans l'invite pour que si le répertoire courant est,/opt/myproj/proj/x
vous pouvez l'afficher comme~proj:x
en faisantzsh_directory_name
le mappageproj:x
<=>/opt/myproj/proj/x
. Cela est également utilisé par leD
drapeau d'expansion des paramètres. Donc, si l'on se développe${(D)somevar}
, cettezsh_directory_name
fonction sera appelée.Ici, nous utilisons
${(D):-}
,${:-}
qui est${no_var:-nothing}
étend de façon à s'est vide, donc par rien tout en appelant . a été précédemment défini comme:nothing
$no_var
${(D):-}
zsh_directory_name
zsh_directory_name
C'est-à-dire que lors de la première extension PS1 (à la première invite),
${(D):-}
l'promptsubst
option sera désactivée (pour annuler la-o promptsubst
),zsh_directory_name()
indéfinie (car nous voulons l'exécuter une seule fois)$PS1
pour ne pas être définie et/path/to/file
pour être sourcée.${PS1=%m%# }
se développe (et affecte$PS1
) à%m%#
moins que PS1 n'ait déjà été défini (par exemple par/path/to/file
après leunset
), et%m%#
se trouve être la valeur par défaut dePS1
.la source