Shell mana yang saya gunakan?

39

Ketika saya menjalankan echo $SHELLoutput mengatakan /bin/tcshyang berarti saya menjalankan tcshshell. Tapi misalnya saat saya mengeluarkan perintah berikut

alias emacs 'emacs -nw' 

Saya mendapatkan kesalahan berikut:

bash: alias: emacs: not found
bash: alias: emacs -nw: not found

dan ketika saya mengeluarkannya alias emacs="emacs -nw"berjalan dengan baik!

Ini membingungkan karena saya menjalankan tcshtetapi perintah ditafsirkan oleh bash.

Apa yang bisa menjadi alasannya?

coffeMug
sumber
tcsh/cshmemiliki shell saat ini di$shell
HongboZhu

Jawaban:

48

$SHELLbelum tentu shell Anda saat ini, itu adalah shell login default . Untuk memeriksa shell yang Anda gunakan, coba

ps $$

Ini harus bekerja pada Unix / Linux terbaru dengan psyang mendukung sintaks BSD. Kalau tidak, ini adalah cara portabel (POSIX)

ps -p $$

Itu akan mengembalikan sesuatu seperti ini jika Anda menjalankan tcsh:

8773 pts/10   00:00:00 tcsh

Jika Anda ingin tcshmenjadi shell default Anda, gunakan chshuntuk mengaturnya.

terdon
sumber
Apakah Anda tahu bagaimana cara memeriksa file konfigurasi mana yang dimuat? (which bashrc)
coffeMug
@Coffe_Mug tidak yakin apa yang Anda maksud. Anda dapat mengatur shell default dengan chsh, .bashrchanya akan dibaca jika Anda i) menjalankan bash dan ii) menjalankannya sebagai shell interaktif, non-login. Bagaimana Anda masuk ke mesin ini?
terdon
Saya punya skrip yang memulai bash shell ini dari shell tcsh.
coffeMug
4
Kenapa tidakps $$
cjm
1
@ cjm kenapa tidak, jawab diedit.
terdon
8

Dari baris perintah, Anda juga bisa menggunakan $0variabel untuk menentukan shell mana yang Anda gunakan. misalnya:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

Catatan: Anda tidak dapat menentukan shell menggunakan $ 0 dalam skrip, karena $ 0 akan menjadi skrip itu sendiri.

jamespfinn
sumber
1

Ini berfungsi untuk linux:

lsof -a -p $$ -d txt

atau, jika Anda membutuhkan pilihan yang lebih kuat (lebih banyak sistem):

lsof -a +D /bin +D /usr/bin -p $$ -d txt

sumber
1

Ini adalah perubahan dari semua jawaban yang lebih baik di atas. Saya memiliki masalah kecil yang mengidentifikasi tanda hubung pada satu titik; sepertinya tepat untuk dibagikan:

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | sh
ash (dash 0.5.5.1 ff)

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | bash
bash 4.3.30(1)-release

Bagus untuk mengatasi masalah di tempat sempit itu saja. Tepuk tangan.

todd_dsm
sumber