Ketika saya menjalankan echo $SHELL
output mengatakan /bin/tcsh
yang berarti saya menjalankan tcsh
shell. 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 tcsh
tetapi perintah ditafsirkan oleh bash
.
Apa yang bisa menjadi alasannya?
tcsh/csh
memiliki shell saat ini di$shell
Jawaban:
$SHELL
belum tentu shell Anda saat ini, itu adalah shell login default . Untuk memeriksa shell yang Anda gunakan, cobaIni harus bekerja pada Unix / Linux terbaru dengan
ps
yang mendukung sintaks BSD. Kalau tidak, ini adalah cara portabel (POSIX)Itu akan mengembalikan sesuatu seperti ini jika Anda menjalankan
tcsh
:Jika Anda ingin
tcsh
menjadi shell default Anda, gunakanchsh
untuk mengaturnya.sumber
chsh
,.bashrc
hanya akan dibaca jika Anda i) menjalankan bash dan ii) menjalankannya sebagai shell interaktif, non-login. Bagaimana Anda masuk ke mesin ini?ps $$
Dari baris perintah, Anda juga bisa menggunakan
$0
variabel untuk menentukan shell mana yang Anda gunakan. misalnya:Catatan: Anda tidak dapat menentukan shell menggunakan $ 0 dalam skrip, karena $ 0 akan menjadi skrip itu sendiri.
sumber
Ini berfungsi untuk linux:
atau, jika Anda membutuhkan pilihan yang lebih kuat (lebih banyak sistem):
sumber
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:
Bagus untuk mengatasi masalah di tempat sempit itu saja. Tepuk tangan.
sumber