Saya ingin dapat memulai zsh dengan file rc khusus yang mirip dengan perintah: bash --rc-file /path/to/file
Jika ini tidak mungkin, maka apakah mungkin untuk memulai zsh, jalankan source /path/to/file
, lalu tetap di sesi zsh yang sama?
Catatan: Perintah zsh --rcs /path/to/file
tidak berfungsi, setidaknya tidak untuk saya ...
EDIT: Secara keseluruhan saya ingin dapat melakukan hal berikut:
ssh
ke server jarak jauh "example.com", jalankan zsh
, source
konfigurasi saya terletak di /path/to/file
, semua dalam 1 perintah. Di sinilah saya berjuang, terutama karena saya lebih suka tidak menulis file konfigurasi pada mesin remote.
code as such
!Jawaban:
Dari halaman manual:
jadi Anda harus dapat mengatur variabel lingkungan
ZDOTDIR
ke direktori baru untuk mendapatkan zsh untuk mencari kumpulan dotfile yang berbeda.Seperti yang disarankan oleh halaman manual,
RCS
danGLOBAL_RCS
bukan path ke file rc, seperti yang Anda coba gunakan, melainkan opsi yang dapat Anda aktifkan atau nonaktifkan. Jadi, misalnya, flag--rcs
akan mengaktifkanRCS
opsi, menyebabkan zsh membaca dari file rc. Anda dapat menggunakan flag baris perintah berikut untuk zsh untuk mengaktifkan atau menonaktifkanRCS
atauGLOBAL_RCS
:Untuk menjawab pertanyaan Anda yang lain:
Ya, ini cukup mudah sesuai dengan petunjuk di atas. Jalankan saja
zsh -d -f
dan kemudiansource /path/to/zshrc
.sumber
zsh -d -f; source /path/to/file
tidak pernah menjalankan perintah kedua di sesi pertama zsh sampai keluar.ssh
ke server jarak jauh "example.com", jalankanzsh
,source
konfigurasi saya terletak di/path/to/file
, semua dalam 1 perintah. Di sinilah saya berjuang, terutama karena saya lebih suka tidak menulis file konfigurasi pada mesin remote. Terima kasih atas jawaban Anda!ssh host "zsh -d -f; source /path/to/file"
, maka ssh akan dijalankan pertama kalizsh
pada host jarak jauh, kemudiansource ...
setelah shell zsh keluar. Sebaliknya yang ingin Anda lakukan adalahssh -t host zsh -d -f
memasukkan shell interaktif ke host jarak jauh, atau jika Anda tidak ingin shell interaktif, lakukanssh host zsh -d -f -c \"source /path/to/file\; other command\; ... \"
.ssh -t host "zsh -d -f; source /path/to/file
menjatuhkan saya kezsh
shell interaktif (dan tandus) .ssh -t host "zsh -d -f; source /path/to/file"
, perintahsource...
TIDAK dijalankan di dalam zsh shell. Ini dijalankan di shell login Anda setelah shell zsh keluar. Untuk menguji ini, jalankanssh host "zsh; echo foo"
. Anda akan melihat output "foo" setelah Anda keluar dari shell zsh.sementara dengan ZDOTDIR, Anda dapat meminta
zsh
untuk menginterpretasikan file yang dipanggil.zshrc
di direktori mana pun yang Anda pilih, setelah itu menafsirkan file apa pun yang Anda pilih (tidak harus disebut.zshrc
) terbukti cukup sulit.Dalam
sh
atauksh
emulasi,zsh
evaluasi$ENV
; sehingga Anda dapat menambahkanemulate zsh
di bagian atas Anda/path/to/file
dan lakukan:Pendekatan lain yang sangat berbelit-belit adalah:
Yang itu layak mendapat sedikit penjelasan.
${foo::=value}
adalah ekspansi variabel yang benar-benar ditetapkan$foo
.$functions
adalah array asosiatif khusus yang memetakan nama fungsi ke definisi mereka.Dengan
promptsubst
opsi, variabel dalam$PS1
diperluas. Jadi, pada prompt pertama, variabel dalam PS1 akan diperluas.The
zsh_directory_name
fungsi fungsi khusus yang membantu memperluas~foo
ke/path/to/something
dan sebaliknya. Itu digunakan misalnya dengan%~
di prompt sehingga jika direktori saat ini/opt/myproj/proj/x
Anda dapat menampilkannya~proj:x
denganzsh_directory_name
melakukan pemetaanproj:x
<=>/opt/myproj/proj/x
. Itu juga digunakan olehD
flag ekspansi parameter. Jadi jika seseorang mengembang${(D)somevar}
,zsh_directory_name
fungsi itu akan dipanggil.Di sini, kami menggunakan
${(D):-}
,,${:-}
yang${no_var:-nothing}
diperluas kenothing
jika$no_var
kosong, jadi${(D):-}
perluas apa-apa saat memanggilzsh_directory_name
.zsh_directory_name
sebelumnya telah didefinisikan sebagai:Yaitu, pada ekspansi PS1 pertama (setelah prompt pertama),
${(D):-}
akan menyebabkanpromptsubst
opsi tidak disetel (untuk membatalkan-o promptsubst
),zsh_directory_name()
menjadi tidak terdefinisi (karena kami ingin menjalankannya hanya sekali)$PS1
menjadi tidak disetel, dan/path/to/file
menjadi sumber.${PS1=%m%# }
memperluas (dan menetapkan$PS1
) ke%m%#
kecuali PS1 sudah didefinisikan (misalnya dengan/path/to/file
setelahunset
), dan%m%#
kebetulan menjadi nilai default dariPS1
.sumber