Ich möchte in der Lage sein, zsh mit einer benutzerdefinierten rc-Datei zu starten, die dem folgenden Befehl ähnelt: bash --rc-file /path/to/file
Wenn dies nicht möglich ist, ist es dann möglich, zsh zu starten, auszuführen source /path/to/file
und dann in derselben zsh-Sitzung zu bleiben?
Hinweis: Der Befehl zsh --rcs /path/to/file
funktioniert nicht, zumindest nicht für mich ...
EDIT: In seiner Gesamtheit Ich möchte der Lage sein , folgendes zu tun:
ssh
zu einem Remote - Server „example.com“, laufen zsh
, source
meine Konfiguration befindet sich auf /path/to/file
, alle in - 1 - Befehl. Dies ist, wo ich gekämpft habe, vor allem, weil ich lieber keine Konfigurationsdateien auf dem Remotecomputer überschreiben möchte.
code as such
!Antworten:
Aus den Manpages:
Sie sollten also in der Lage sein, die Umgebungsvariable
ZDOTDIR
auf ein neues Verzeichnis zu setzen, damit zsh nach einem anderen Satz von Punktdateien sucht.Als der Mann Seite schon sagt,
RCS
undGLOBAL_RCS
sind nicht Pfade zu rc - Dateien, wie Sie sie versuchen , zu verwenden, sondern Optionen können Sie oder deaktivieren aktivieren. So--rcs
aktiviert das Flag beispielsweise dieRCS
Option, sodass zsh aus RC-Dateien liest. Sie können die folgenden Befehlszeilenflags verwenden, um zsh zu aktivieren oder zu deaktivierenRCS
oderGLOBAL_RCS
:So beantworten Sie Ihre andere Frage:
Ja, das ist nach den obigen Anweisungen ziemlich einfach. Einfach rennen
zsh -d -f
und dannsource /path/to/zshrc
.quelle
zsh -d -f; source /path/to/file
Ausführen des zweiten Befehls in der ersten Sitzung von zsh erst nach dem Beenden ausgeführt wird.ssh
zu einem Remote - Server „example.com“, laufenzsh
,source
meine Konfiguration befindet sich auf/path/to/file
, alle in - 1 - Befehl. Dies ist, wo ich gekämpft habe, vor allem, weil ich lieber keine Konfigurationsdateien auf dem Remotecomputer überschreiben möchte. Vielen Dank für Ihre Antwort!ssh host "zsh -d -f; source /path/to/file"
, wird ssh zuerstzsh
auf dem Remote-Host ausgeführt und dann,source ...
nachdem die zsh-Shell beendet wurde. Sie möchten stattdessenssh -t host zsh -d -f
in eine interaktive Shell auf dem Remotehost ziehen oder, wenn Sie keine interaktive Shell möchten, dies tunssh host zsh -d -f -c \"source /path/to/file\; other command\; ... \"
.ssh -t host "zsh -d -f; source /path/to/file
mich das Laufen in eine interaktive (und unfruchtbare)zsh
Shell stürzt .ssh -t host "zsh -d -f; source /path/to/file"
wird der Befehlsource...
NICHT in der zsh-Shell ausgeführt. Es wird in Ihrer Login-Shell ausgeführt, nachdem die zsh-Shell beendet wurde. Führen Sie den Befehl aus, um dies zu testenssh host "zsh; echo foo"
. Sie sehen die Ausgabe "foo", nachdem Sie die zsh-Shell verlassen haben.Während mit ZDOTDIR, können Sie sagen
zsh
eine Datei, die.zshrc
in einem beliebigen Verzeichnis Ihrer Wahl aufgerufen wird, interpretiert werden soll. Die Interpretation einer beliebigen Datei (die nicht unbedingt aufgerufen wird.zshrc
) ist jedoch recht schwierig.In
sh
oderksh
Emulation,zsh
wertet aus$ENV
; so können Sieemulate zsh
am oberen Rand Ihrer hinzufügen/path/to/file
und tun:Ein anderer sehr komplizierter Ansatz könnte sein:
Das verdient eine Erklärung.
${foo::=value}
ist eine variable Erweiterung, die tatsächlich setzt$foo
.$functions
ist ein spezielles assoziatives Array, das Funktionsnamen ihren Definitionen zuordnet.Mit der
promptsubst
Option können Variablen in$PS1
erweitert. Bei der ersten Aufforderung werden die Variablen in dieser PS1 erweitert.Die
zsh_directory_name
Funktion ist eine spezielle Funktion, die beim Erweitern des~foo
Vor-/path/to/something
und Rücklaufs hilft . Dies wird zum Beispiel%~
in der Eingabeaufforderung mit verwendet, damit Sie das aktuelle Verzeichnis/opt/myproj/proj/x
anzeigen können,~proj:x
indemzsh_directory_name
Sie das Mapping durchführenproj:x
<=>/opt/myproj/proj/x
. Dies wird auch vomD
Parametererweiterungsflag verwendet. Wenn man also expandiert${(D)somevar}
, wird diesezsh_directory_name
Funktion aufgerufen.Hier verwenden wir
${(D):-}
,${:-}
, das ist${no_var:-nothing}
ERWEITERTnothing
wenn$no_var
leer ist, so${(D):-}
zu nichts expandiert beim Telefonierenzsh_directory_name
.zsh_directory_name
wurde bisher definiert als:Das heißt, bei der ersten PS1-Erweiterung (bei der ersten Eingabeaufforderung)
${(D):-}
wird diepromptsubst
Option deaktiviert (um den Vorgang abzubrechen-o promptsubst
),zsh_directory_name()
undefiniert (da wir sie nur einmal ausführen möchten)$PS1
und deaktiviert/path/to/file
als Quelle ausgewählt.${PS1=%m%# }
wird erweitert (und zugewiesen$PS1
),%m%#
sofern PS1 nicht bereits definiert wurde (z. B./path/to/file
nach demunset
) und%m%#
zufällig der Standardwert von istPS1
.quelle