[ShellScript]Masalah Subshell


Kemarin malam saya baru tahu bahwa menggunakan pipe atau | dalam shellscript ternyata menimbulkan masalah dengan variabel. Pipe ini mengakibatkan variabel kita tidak pernah berubah nilainya meskipun kita telah memberikan nilai berbeda. Hal ini disebabkan pipe membuat proses baru yang merupakan proses anak. Sebagai contoh :

jmlbaris=0
cat /tmp/namafile |
	while read line; do
	let jmlbaris+=1
	echo "jmlbaris dlm loop $jmlbaris"
done

echo "total jmlbaris $jmlbaris"

jika dijalankan akan menghasilkan :

jmlbaris dlm loop 01
jmlbaris dlm loop 011
total jmlbaris 0

jmlbaris selalu bernilai 0
Untuk itu kita harus mengatasi subshell ini, salah satunya menghindari pipe. Misal untuk kasus diatas maka bisa dignati seperti ini :

jmlbaris=0;
 
while read line
do
	let jmlbaris+=1
	echo "jmlbaris dlm loop $jmlbaris"
done < /tmp/namafile

echo "total jmlbaris $jmlbaris"

Jika kode diatas di-run maka akan dihasilkan

jmlbaris dlm loop 1
jmlbaris dlm loop 2
total jmlbaris 2

Jika memang anda melakuan pipe, sebaiknya variabel tersebut disimpan sementara waktu dalam sebuah file dan diproses setelah semua proses selesai.
Happy Coder Mommy🙂

  1. No trackbacks yet.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s