GNU/Linux >> Belajar Linux >  >> Linux

Mengapa saya masih mencintai tcsh setelah bertahun-tahun

Saya menganggap diri saya pengguna Bash yang bahagia. Namun, ketika saya mulai menjelajahi Unix, itu pada sistem Unix berpemilik yang menyediakan tcsh secara default, jadi pengalaman shell saya yang paling awal adalah pada versi modern dari C shell (csh). Itu ternyata merupakan kecelakaan yang menguntungkan karena tcsh juga merupakan cangkang pilihan di studio film tempat saya bekerja kemudian dalam karir saya.

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Sampai hari ini, ada beberapa tugas yang saya kaitkan dengan tcsh, meskipun tidak ada korelasi logis di sana. Saya masih menggunakan tcsh pada setidaknya satu sistem, jika hanya untuk tetap berlatih. Saya juga tetap menginstalnya di semua sistem saya untuk menjaga kompatibilitas dengan skrip tcsh saya sendiri dan untuk memastikan saya dapat meluncurkannya ketika saya perlu menulis skrip yang saya inginkan di tcsh.

Perbedaan antara C shell dan Bash

Tcsh adalah kelanjutan modern dari csh. Ketika shell C dirilis pada tahun 1978, pengguna sangat antusias dengan sintaksis C-nya. C adalah bahasa pemrograman baru pada saat itu, dan yang lebih penting, itulah yang digunakan untuk menulis Unix, sehingga sebagian besar pengguna Unix lebih nyaman dengan C daripada bahasa skrip arbitrer. Misalnya, di Bash, if . ini loop membuat panggilan "rahasia" ke test biner untuk mengevaluasi pernyataan kondisional (bagian dalam tanda kurung):

v=1

if [ $v -gt 0 ]
  then
  echo "verbose"
fi

Berikut pernyataan yang sama di csh atau tcsh, tanpa panggilan eksternal ke test karena pernyataan kondisional (kode dalam tanda kurung) menggunakan evaluasi bawaan csh:

set v=1

if ($v > 1) then
  echo "verbose"
endif

Ini menunjukkan beberapa hal, baik dan buruk. Misalnya, wajar bagi programmer C untuk mengetikkan kondisi dalam tanda kurung, dan dari sudut pandang programmer, evaluasi matematika yang dibangun ke dalam executable adalah hal yang wajar. Sebaliknya, if sintaks loop memiliki lebih banyak kesamaan dengan Lua daripada C, yang menggunakan kurung kurawal sebagai pembatas:

// this does not work in Csh
if ( v>1 ) {
        printf("verbose");
}

Di satu sisi, ini meringkas csh dengan baik:bersih, efisien, dan akrab bagi sebagian orang, tetapi unik dan tidak konsisten.

Jadi mengapa menggunakannya?

Tcsh untuk presisi

Saya menulis lebih banyak C++ dan Java daripada kode C, jadi minat saya pada tcsh sedikit berbagi dengan klaim historisnya untuk ketenaran. Namun, saya menikmati Lua, dan di satu sisi, saya memikirkan tcsh dan shell lain seperti saya memikirkan Lua dan Python atau bahkan Markdown dan Docbook. Kedua cangkang memiliki kelebihan, dan mudah untuk menunjuk ke salah satu yang lebih populer, tetapi ada kejelasan yang ketat untuk yang lain. Faktanya, saya merasa tcsh memiliki presisi yang tidak dimiliki banyak shell lainnya.

Variabel

Anda tidak mendapatkan kemewahan variabel yang diketik dalam shell, tetapi dengan tcsh, Anda setidaknya dapat mendeklarasikannya dengan kata kunci. Anehnya, ada beberapa kata kunci yang dapat Anda gunakan untuk tugas tersebut, tetapi yang saya pilih adalah set :

> set var=foo
> echo $var
foo

Anda dapat memperluas variabel dengan mengetikkan nama variabel (var dalam contoh ini) lalu menekan Ctrl+X diikuti oleh $ (dolar) kunci. Contoh di atas menetapkan var untuk foo .

Seperti banyak shell lainnya, Anda dapat membuat daftar semua variabel yang disetel menggunakan set sendirian tanpa argumen:

> set
term    xterm
tty     pts/2
uid     1000
user    seth
var     foo
[...]

Anda dapat menghapus variabel menggunakan unset perintah:

> unset var
> set | grep var
>

Fitur yang hilang adalah fitur

Mungkin Anda pernah melihat baris seperti ini dalam skrip:

var=GitLab
${var,,}

Baris kedua adalah fungsi bawaan untuk mengubah konten var menjadi huruf kecil.

Sementara fungsi tambahan seperti ini sangat berguna, terkadang saya merasa mereka mengundang kebingungan. Scripting shell seperti HTML pemrograman; ini adalah salah satu dari sedikit bahasa serius yang dapat Anda pelajari sendiri hanya dengan membaca kode orang lain. Itu bukan alasan yang bagus untuk melepaskan fungsi yang berguna, tetapi itulah alasan saya mencoba menghindari beberapa singkatan samar yang populer dalam berbagai bahasa. Saat menulis dalam tcsh, saya tidak memiliki opsi untuk menggunakan banyak singkatan, jadi operasi string yang rumit harus dilakukan dengan alat Unix dasar daripada dengan pintasan bawaan. Saya yakin ini menghasilkan kode yang lebih mudah dibaca, dan itu membuat perbedaan besar bagi kontributor di masa mendatang—dan di masa depan, saya yang pelupa .

Matematika bawaan

Salah satu hal yang saya sukai dari tcsh adalah @ . bawaannya jalan pintas matematika. Seperti kebanyakan pengguna Unix otodidak, saya menemukan bc, dan saya menyesalinya sejak itu. Bukan karena kesalahannya sendiri, bc sering diajarkan kepada pengguna sebagai kalkulator baris perintah padahal sebenarnya lebih cocok sebagai bahasa perhitungan . Solusinya mencakup kalkulator 300 baris yang luar biasa dalam Bash murni, atau biarkan perintah di Bash, atau @ perintah di tcsh.

> @ n = ( 1 + 1 / 2 )
> echo $n
1

Untuk matematika yang sangat kompleks, mungkin ada baiknya mempelajari bc atau perpustakaan matematika Python yang bagus.

Semua yang penting

Bagi saya, tcsh memberikan keseimbangan sempurna antara kesederhanaan yang mencolok dan fitur-fitur penting. Ini bukan shell untuk semua pengguna, atau bahkan untuk semua tujuan, tetapi jika Anda ingin menyederhanakan pandangan Anda tentang dunia berbasis teks, tcsh mungkin memberikan alternatif yang menarik.


Linux
  1. Selamat Ulang Tahun, GNU:Mengapa saya masih mencintai GNU 35 tahun kemudian

  2. Mengapa saya jatuh cinta dengan Antergos Linux

  3. Dd Vs Cat — Apakah Dd Masih Relevan Saat Ini?

  1. Mengapa Penundaan Lama Setelah Perintah Tidak Ditemukan?

  2. Mengapa dentang masih membutuhkan libgcc.a untuk mengkompilasi kode saya?

  3. Mengapa Centos masih belum menggunakan kernel terbaru

  1. Mengapa programmer menyukai kemasan Linux

  2. 5 alasan mengapa saya suka coding di Linux

  3. Mengapa Systemd Menghentikan Layanan Segera Setelah Dimulai?