Saya menggunakan komputer sekolah saya dan ingin menggunakan zsh
bukan bash
. Saya ingin menjadikannya shell default, tetapi saya tidak dapat menjalankan perintah seperti itu $ chsh -s $(which zsh)
karena saya tidak memiliki hak admin.
Apakah ada cara saya dapat memasukkan sesuatu ke dalam saya .bashrc
atau sesuatu yang secara otomatis memanggil zsh
ketika terbuka sebagai solusi?
Untuk memperjelas, zsh
sudah diinstal.
zsh
pada.bashrc
file. Logout dan login dan selesai!zsh
baris pertama?bash
dipanggil secara eksplisit. Lebih baik tempatkan.bash_profile
saja.Jawaban:
Buat
.bash_profile
di direktori home Anda dan tambahkan baris ini:Pembaruan:
.profile
dapat berfungsi sebagai solusi umum ketika shell default bukan bash. Saya tidak yakin apakah.profile
dapat dipanggil oleh Zsh juga bahwa itu bisa berlebihan tetapi kita bisa melakukannya dengan aman dengan cek sederhana:Kita juga bisa menggunakan
which
untuk mendapatkan jalur dinamiszsh
yang bergantung pada nilai$PATH
:sumber
.bash_profile
tidak akan dirujuk. Bagaimana kalau dimasukkan ini.profile
sebagai gantinya?.profile
tidak berhasil. Juga tidak.profile
akan dipanggil olehZsh
? Itu bisa berlebihan. Belum memeriksa itu. (Pembaruan: Itu berhasil sekarang, tidak yakin kesalahan apa yang saya buat sebelumnya.) Adakah pemikiran tentang kemungkinan kelemahan menggunakan.profile
?.profile
jika.bash_profile
tidak ada (kecuali jika Anda sumbernya secara manual.bash_profile
, tentu saja). Secara khusus, bash sumber yang pertama dari file [.bash_profile
>.bash_login
>.profile
] yang ditemukan. Ini hanya terlihat.profile
sebagai fitur kompatibilitas POSIX (shell Bourne).zsh
..bash_profile
dan.profile
tidak berfungsi (file-file itu bahkan tidak dieksekusi, Fedora 26 di komputer universitas).Biasanya Anda dapat menggunakan
chsh
sebagai pengguna non-root. Tapi kadang-kadang dinonaktifkan, biasanya di situs yang menggunakan beberapa bentuk database pengguna jaringan seperti NIS dan LDAP. Mungkin adaypchsh
(NIS) atauchsh.ldap
(LDAP) sebagai gantinya.chsh
biasanya juga hanya mengizinkan beberapa shell yang disetujui , biasanya yang terdaftar di/etc/shells
.Jika Anda tidak dapat menggunakan
chsh
atau variasinya di situs Anda, maka atur shell loginexec
Anda ke shell favorit Anda, dan aturSHELL
variabel untuk menunjuk ke shell favorit Anda.Jika shell login Anda adalah
sh
,dash
atauksh
: file yang perlu Anda edit adalah~/.profile
. Berhati-hatilah bahwa file ini dibaca pada awal sesi interaktif dan juga oleh beberapa skrip startup sesi non-interaktif (misalnya untuk sesi X11), jadi Anda harus berhati-hati: hanya panggilanexec
(yang menggantikan proses saat ini) saat saat ini shell bersifat interaktif. Kecuali untuk shell Bourne (versi/bin/sh
Solaris 10 dan sebelumnya), Anda dapat mengatakan bahwa shell interaktif dengan kehadirani
dalam daftar opsi ($-
).Jika Anda ingin zsh untuk membaca Anda
.zprofile
, sampaikan-l
opsi.Jika shell login
bash
Anda, Anda dapat melanjutkan seperti di atas. Atau, Anda dapat menempatkan perintah ini di~/.bash_profile
. Sebagian besar skrip startup sesi hanya membaca~/.profile
dan tidak~/.bash_profile
, tetapi saya telah melihat beberapa skrip berjalan di bawah bash dan membaca.bash_profile
, jadi bahkan di sana Anda harus berhati-hati untuk tidak memanggilexec
shell non-interaktif.Jika shell login Anda adalah csh atau tcsh, lihat contoh di Mengganti shell default tanpa chsh atau hak administrator
sumber
Saya percaya bahwa perintahnya
chsh
adalah untuk tujuan ini. Meskipun, saya tidak yakin bahwa setiap distro Linux / Unix mendukung itu. Periksa halaman manual darichsh
.sumber
passwd -s
.Jika Anda tidak dapat berlari
chsh
karena Anda tidak memiliki hak admin, bicaralah dengan seseorang yang punya .Kemungkinan besar Anda tidak dapat menggunakan
chsh
sebagai non-root karena sistem yang Anda gunakan dikonfigurasi sehinggachsh
tidak akan berfungsi, misalnya karena sistem menggunakan NIS atau LDAP daripada hanya/etc/passwd
file. Atau mungkin administrator sistem Anda hanya ingin mempertahankan kontrol.Prosedur untuk mengganti shell Anda tergantung pada kebijakan organisasi Anda. Mungkin ada perintah lokal yang melakukan apa yang
chsh
biasanya dilakukan. Atau Anda mungkin perlu mengirimkan tiket dukungan meminta perubahan shell.Sebagian besar jawaban lain baik, tetapi jika administrator Anda cukup responsif, Anda mungkin tidak ingin repot-repot meretas skrip startup Anda. Saya mungkin baru saja memohon
zsh -l
secara manual setelah masuk hingga administrator dapat memperbarui akun saya.Hal lain yang perlu diingat: Kadang-kadang shell yang berbeda dapat menggunakan file startup yang sama. Misalnya,
sh
danbash
dapat baik mengeksekusi$HOME/.profile
, dancsh
dantcsh
keduanya dapat mengeksekusi$HOME/.login
dan$HOME/.cshrc
(meskipun file startup shell khusus seperti.bashrc
,.bash_profile
, dan.tcshrc
dapat menimpa mereka). Jika shell default/bin/csh
Anda dan Anda ingin menggunakan/bin/tcsh
, memperbarui Anda.login
untuk memohon/bin/tcsh -l
dapat membuat loop tak terbatas.zsh
tidak terjadi untuk menjalankanbash
file startup khusus, jadi itu bukan masalah bagi Anda.Kebanyakan kerang set variabel yang mengidentifikasi shell Anda menjalankan (
$BASH_VERSION
,$tcsh
,$ZSH_VERSION
). Jika Anda akan menulis kode startup untuk memohon shell pilihan Anda, itu bukan ide yang buruk untuk menyertakannya diif
sehingga dijalankan hanya jika Anda belum menjalankan shell itu. Menggunakan kode dari jawaban konsolebox :(Komplikasi tambahan dari pemeriksaan
"${ZSH_VERSION:-unset}"
daripada hanya"$ZSH_VERSION"
memungkinkan untuk kemungkinan yang telah Anda lakukanset -o unset
, opsi yang menyebabkan referensi ke variabel yang tidak ditentukan menjadi kesalahan.)sumber
Saya bisa memikirkan beberapa skenario.
zsh
tidak ada/etc/shells
, dan OP ingin menggunakannya tanpa harus mengetikkanzsh
command prompt. Solusi yang memungkinkan.a) menggunakan trik profil untuk menjalankannya saat login. Ini sama efektifnya dengan benar-benar mengubah shell.
b) mohon admin untuk menambahkan
zsh
ke/etc/shells
sehingga Anda dapatchsh
untuk ituc) mohon admin untuk mengganti shell Anda. ini tidak bijaksana, karena Anda akan kehilangan kemampuan untuk
ftp
masuk. Anda hanya dapat menggunakanftp
jika Anda memiliki shell/etc/shells
pengguna ingin keluar dari shell terbatas, kemungkinan besar
rbash
ataursh
.Jika
.profile
dapat diedit,PATH
dapat diperluas dengan mengeditnya. Setelah/bin
berada di jalur, Anda bisa mulaibash
dari dalamrsh/rbash
, mendapatkan akses kechsh
perintah untuk membiarkan Anda mengganti shell. Banyak perintah memiliki shell escapes yang dapat digunakan untuk keluar dari shell yang dibatasi dan mendapatkan kembali akses kechsh
.chsh
benar-benar tidak berfungsi karena beberapa alasan lain. solusi dari kemungkinan 1 adalah jawaban di sini juga.Skenario 2 adalah satu-satunya alasan untuk benar-benar mengubah shell default (terlalu ketat).
sumber
Saya tidak berpikir jawaban yang diberikan benar-benar membuat
zsh
shell default. Sederhana mengubah shell ke zsh segera setelah pengguna login ke shell default- nya . Pengguna masih akan login ke nyaDEFAULT SHELL
tetapi dengan ini, shell akan berubah menjadizsh
Untuk mengubah penggunaan shell default:
Anda harus menjadi root untuk melakukan itu.
Kalau tidak, solusi di atas akan berguna.
Ditambahkan dari komentar
dan itu bisa dipanggil oleh pengguna untuk dirinya sendiri.
sumber
chsh -s /path/to/zsh
lebih standar dan biasanya (tetapi tidak selalu) tidak memerlukan akses root, tidak sepertiusermod
yang selalu dilakukan. Jadi jawaban Anda memiliki lebih banyak masalah daripada yang dinyatakan tidak berfungsi.