Bagaimana cara saya beralih dari shell yang tidak dikenal ke bash?

41

Saya terkejut bahwa saya belum menemukan pertanyaan ini di situs. Jadi, hari ini $muncul setelah saya masuk sebagai pengguna baru. Ini tidak terduga karena permintaan pengguna utama saya dimulai dengan username@computername:~$.

Jadi, bagaimana cara saya beralih dari shell lain ke bash?

mouche
sumber
8
Hanya karena $muncul username@computername:~$bukan berarti itu bukan bash. Pemformatan yang tepat dari prompt diatur oleh variabel PS1, yang dapat diatur atau disesuaikan secara berbeda untuk pengguna yang berbeda.
frabjous
3
@mouche Re: @frabjous echo $SHELLuntuk mencari tahu apa shell Anda saat ini.
xenoterracide
1
@mouche @frabjous dan dimulai dengan $ sebenarnya umum untuk bash, beberapa cangkang non bash seperti zsh menggunakan% out of the box, saya percaya cangkang lain menggunakan hal-hal lain.
xenoterracide
1
@mouche /bin/shsering tidak berarti banyak yang biasanya merupakan symlink ke hal lain. Saya mengetik ls -l /bin/shuntuk melihat apa itu symlink. Dalam beberapa kasus menjadi symlink ke sesuatu mengubah perilakunya, saya tidak berpikir bash seperti itu.
xenoterracide
3
@xenoterracide - Menggunakan bashsebagai /bin/sh menonaktifkan banyak fitur bash (masuk ke mode kepatuhan POSIX).
Chris Down

Jawaban:

61

Dengan asumsi shell yang tidak dikenal mendukung menjalankan perintah absolut, Anda dapat mencoba: /bin/bash

Untuk mengubah shell default, saya akan menggunakan chsh(1). Penggunaan sampel:chsh -s /bin/bash $USER

Kevin M.
sumber
1
Apakah chsh mengubah shell secara permanen atau hanya untuk sesi saat ini?
mouche
10
@ouche Secara Permanen; itu mengubah entri Anda di/etc/passwd
Michael Mrozek
@mouche, chsh(1)hanya akan memungkinkan untuk mengubah ke shell yang terdaftar di /etc/shells(dan tersedia, mungkin). chsh -ldaftar alternatif. Hati-hati, beberapa (seperti nologin) didefinisikan untuk akun yang tidak boleh digunakan untuk login (cara yang bagus untuk mengunci diri sendiri), mungkin ada penambahan lokal untuk penggunaan khusus.
vonbrand
19

Anda mengetik bash. Jika Anda ingin ini menjadi permanen, ganti shell default /bin/bashdengan mengedit /etc/passwd.

Berikut beberapa cuplikan dari saya /etc/passwd:

avahi:x:84:84:Avahi daemon:/:/bin/false
xenoterracide:x:1000:100::/home/xenoterracide:/bin/zsh
postgres:x:88:88::/var/lib/postgres:/bin/zsh
bob:x:1001:1001::/home/bob:/bin/bash
usbmux:x:140:140:usbmux user:/:/sbin/nologin

Bidang terakhir berisi shell, Memodifikasi bidang setelah yang terakhir :ke shell yang valid atau tidak valid akan berfungsi. /bin/falsedan /sbin/nologinkeduanya berarti pengguna tidak memiliki shell login asli, meskipun jika pam tidak diatur dengan benar ini tidak berarti mereka tidak bisa login (saya melaporkan bug tentang ini di Arch Linux, karena Anda dapat login secara grafis tanpa harus shell login). /bin/bashdan /bin/zshkeduanya adalah shell yang valid, lihat /etc/shellsdaftar shell yang valid pada sistem Anda. Inilah saya /etc/shellsjika Anda tertarik.

/bin/sh
/bin/bash
/bin/ksh
/bin/zsh
/bin/dash

Ya, Anda dapat menggunakan chshatau usermodmelakukan hal yang sama, harap diingat ini hanya file teks terstruktur, dan TIMTOWTDI.

xenoterracide
sumber
11
Anda mungkin ingin menggunakan chshalih-alih mengedit secara manualpasswd
Michael Mrozek
@Michael ada sekitar 5 (POOMA) cara berbeda untuk mengganti shell di /etc/passwdSaya tidak merasa ingin mendaftar, karena saya selalu melakukannya secara manual. chsh dan usermod bisa melakukannya.
xenoterracide
Bergaul dengan file konfigurasi adalah Ide Buruk (TM), kesalahan mungkin membuat sistem tidak dapat digunakan. Ya, ini sering merupakan satu-satunya cara tercepat, tetapi kemudian lakukan dengan sangat hati-hati .
vonbrand
12

Jika chsh atau mengedit konfigurasi secara manual tidak akan berfungsi, tetapi skrip ~ / .profile dijalankan saat login, tambahkan baris ini:

exec /bin/bash --login
Kevin Cantu
sumber
Setelah melihat-lihat sebentar, ini solusi yang saya butuhkan. Terima kasih!
PearsonArtPhoto
Ide bagus, khususnya jika shell memilih sumber yang
diarsipkan saat
touch ~/.bash_profileatau jika bash akan mengeksekusi dirinya sendiri dalam satu loop: bash mengambil ~/.profiledalam kasus ~/.bash_profiletidak ada.
har-wradim