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?


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.


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.


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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.