Chcę móc uruchomić zsh z niestandardowym plikiem rc podobnym do polecenia: bash --rc-file /path/to/file
Jeśli nie jest to możliwe, to czy można uruchomić Zsh, uruchomić source /path/to/file
, a następnie pozostać w tej samej sesji Zsh?
Uwaga: polecenie zsh --rcs /path/to/file
nie działa, przynajmniej nie dla mnie ...
EDYCJA: W całości chcę móc wykonać następujące czynności:
ssh
na zdalnym serwerze „przyklad.com”, uruchom zsh
, source
moja konfiguracja znajduje się /path/to/file
w poleceniu wszystko w 1. To właśnie tam walczyłem, szczególnie dlatego, że wolałbym nie zapisywać żadnych plików konfiguracyjnych na zdalnym komputerze.
code as such
!Odpowiedzi:
Ze stron podręcznika:
więc powinieneś być w stanie ustawić zmienną środowiskową
ZDOTDIR
na nowy katalog, aby zsh szukał innego zestawu plików dot.Jak sugeruje strona podręcznika,
RCS
iGLOBAL_RCS
nie są ścieżkami do plików rc, gdy próbujesz ich użyć, ale raczej opcje, które możesz włączyć lub wyłączyć. Na przykład flaga--rcs
włączy tęRCS
opcję, powodując, że zsh będzie czytać z plików rc. Możesz użyć następujących flag wiersza poleceń, aby włączyć lub wyłączyć zshRCS
lubGLOBAL_RCS
:Aby odpowiedzieć na inne pytanie:
Tak, jest to dość łatwe zgodnie z powyższymi wskazówkami. Po prostu biegnij
zsh -d -f
i wtedysource /path/to/zshrc
.źródło
zsh -d -f; source /path/to/file
nigdy nie wykonuje drugiego polecenia w pierwszej sesji zsh aż do wyjścia.ssh
na zdalny serwer „przyklad.com”, uruchomzsh
,source
moja konfiguracja znajduje się pod/path/to/file
, polecenie wszystko w 1. To właśnie tam walczyłem, szczególnie dlatego, że wolałbym nie zapisywać żadnych plików konfiguracyjnych na zdalnym komputerze. Dziękuję za odpowiedź!ssh host "zsh -d -f; source /path/to/file"
, ssh uruchomi się najpierwzsh
na zdalnym hoście, a następniesource ...
po wyjściu powłoki zsh. Zamiast tego chceszssh -t host zsh -d -f
upuścić się w interaktywną powłokę na zdalnym hoście lub, jeśli nie chcesz interaktywnej powłoki, zrób tossh host zsh -d -f -c \"source /path/to/file\; other command\; ... \"
.ssh -t host "zsh -d -f; source /path/to/file
upuszcza mnie do interaktywnej (i jałowej)zsh
powłoki.ssh -t host "zsh -d -f; source /path/to/file"
poleceniesource...
NIE jest uruchamiane w powłoce zsh. Jest uruchamiany w powłoce logowania po wyjściu z powłoki zsh. Aby to przetestować, uruchomssh host "zsh; echo foo"
. Zobaczysz wynik „foo” po wyjściu z powłoki zsh.podczas gdy w ZDOTDIR możesz
zsh
zinterpretować plik wywoływany.zshrc
w dowolnym wybranym katalogu, interpretacja dowolnego pliku (niekoniecznie wywołanego.zshrc
) okazuje się dość trudna.W
sh
lubksh
emulacji,zsh
ocenia$ENV
; więc możesz dodaćemulate zsh
u góry/path/to/file
i zrobić:Innym bardzo skomplikowanym podejściem może być:
Ten zasługuje na trochę wyjaśnienia.
${foo::=value}
jest zmiennym rozszerzeniem, które faktycznie ustawia$foo
.$functions
to specjalna tablica asocjacyjna, która odwzorowuje nazwy funkcji na ich definicje.Dzięki tej
promptsubst
opcji zmienne w$PS1
są rozszerzane. Tak więc po pierwszym pytaniu zmienne w tym PS1 zostaną rozwinięte.Ta
zsh_directory_name
funkcja jest funkcją specjalną, która pomaga rozwinąć~foo
do/path/to/something
i do tyłu. Jest to używane na przykład%~
w znaku zachęty, więc jeśli bieżącym katalogiem jest/opt/myproj/proj/x
, możesz go wyświetlić tak jak~proj:x
poprzezzsh_directory_name
mapowanieproj:x
<=>/opt/myproj/proj/x
. Jest to również używane przezD
flagę rozszerzenia parametru. Więc jeśli ktoś się rozszerzy${(D)somevar}
,zsh_directory_name
funkcja ta zostanie wywołana.Tutaj używamy
${(D):-}
,${:-}
czyli${no_var:-nothing}
rozszerza sięnothing
, gdy$no_var
jest pusty, więc${(D):-}
rozwija się niczym podczas wywoływaniazsh_directory_name
.zsh_directory_name
został wcześniej zdefiniowany jako:Oznacza to, że po pierwszym rozszerzeniu PS1 (po pierwszym pytaniu)
${(D):-}
spowoduje wyłączeniepromptsubst
opcji (anulowanie-o promptsubst
),zsh_directory_name()
niezdefiniowanie (ponieważ chcemy uruchomić ją tylko raz)$PS1
i/path/to/file
wyłączenie.${PS1=%m%# }
rozwija się (i przypisuje$PS1
) do,%m%#
chyba że PS1 został już zdefiniowany (na przykład/path/to/file
po pounset
) i%m%#
zdarza się, że jest wartością domyślnąPS1
.źródło