Shebang itu apa?

Pengguna linux, BSD, ataupun mac yang terbiasa melihat source code sangat mungkin sudah tidak asing lagi dengan shebang. Ada yang menyebut shebang sebagai sh bang, shabang, hashbang, hashpling, dan poundbang. Shebang ini dituliskan di baris pertama, yakni diawali dengan #!.

Contoh, untuk perl :

#!/usr/bin/perl

atau

#!/usr/bin/env perl

Sebagai pengguna linux khususnya Slackware, user akan merasakan betapa pentingnya shebang ini. Kepentingannya terkait fungsi shebang itu sendiri dan bagaimana user menjalankannya.

Fungsi shebang

Shebang berfungsi untuk memberi tahu sistem (pada komputer), interpreter apa yang digunakan. Apakah shell? Kalau shell, mau pakai bash, csh, ksh, atau zsh? Apakah perl? Ataukah python? Ataukah ruby?

Bagaimana menjalankannya

Ada 2 cara yang biasa dilakukan untuk menjalankan program :

  • Menyertakan interpreternya di awal command

Contoh :

perl program.pl
  • Tanpa menuliskan interpreternya

Contoh :

./program.pl

Cara ini mengharuskan programnya (program.pl) dijadikan executable terlebih dahulu, sehingga bisa dieksekusi/dijalankan tanpa harus menuliskan interpreternya, yaitu dengan cara

chmod +x program.pl

Contoh kasus

Misalnya, ada sebuah program yang filenya bernama tes, yang isinya

$a = 5

print $a

Bagi orang yang sudah berpengalaman (terutama programmer) bisa saja dengan cepat menentukan bahasa atau interpreter apa yang digunakan. Tapi bagaimana dengan yang “jam terbang” coding nya masih baru? Atau yang awam seperti saya? Mungkin bingung dan akan coba-coba. Ya, coba-coba karena filenya tanpa ekstensi. Kalau ada ekstensinya kan bisa lebih mudah, langsung ketahuan.

  • bash
$ bash tes
tes: line 1: =5: command not found
tes: line 3: print: command not found
  • csh
$ csh tes
a: Undefined variable.
  • ksh
$ ksh tes
tes: line 1: =5: not found
  • zsh
$ zsh tes
tes:1: 5 not found
  • perl
$ perl tes
syntax error at tes line 3, near "print"
Execution of tes aborted due to compilation errors.
  • python
$ python tes
  File "tes", line 1
    $a=5
    ^
SyntaxError: invalid syntax
  • ruby
$ ruby tes
5

Ternyata ruby!

Di sisi lain, mari kita anggap saja tidak mau ambil pusing ini interpreternya apa. Pakai cara kedua.

$ ./tes
./tes: line 1: =5: command not found
./tes: line 3: print: command not found

Waduh…. error!

Nah, tidak menuliskan shebang ternyata bisa menimbulkan masalah. Kalau begini, tentu saja kontraproduktif dengan tujuan dibuatnya program sebagai sarana problem solving/menyelesaikan masalah.