My Custom Bash Prompt

I’m not Bash Shell Expert, but I like to do lot’s stuff from shell. Faktor kenyamanan penggunaan menjadi perhatian penting Saya. Bash prompt standar dari openSUSE 11.1 bagi saya kurang nyaman untuk digunakan sehari-hari, karena itu akan Saya coba untuk menuliskan beberapa perubahan yg Saya gunakan.Bash yg Saya gunakan merupakan versi standard dari openSUSE 11.1, dan modifikasi bash prompt ini diilhami dari howto ini

openSUSE 11.1 default bash prompt
openSUSE 11.1 default bash prompt

mod 1, fortune

Dari Wikipedia, fortune didefinisikan sebagai:

fortune is a simple program that displays a random message from a database of quotations. Most distributions of fortune are bundled with a collection of themed files, containing sayings like those found on fortune cookies (hence the name), quotations from famous people, jokes, or poetry. fortune is predominantly found on Unix-like systems, but clients for other platforms exist as well. Often, users on text-mode Unix terminals will place this command into either their .profile or .logout files to display them at logon and logout, respectively. It is also used to generate text input for certain XScreenSaver modes.

fortune sebenarnya cuma buat asik-asikan aja kq, ada dan tiadanya nggak terlalu masalah buat ku. Yahh.. just for fun aja lah..😛 fortune tidak disertakan pada instalasi default openSUSE, jadi tambahkan dulu:

slametyp@laptop:~> sudo zypper in fortune
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW package is going to be installed:
fortune

Overall download size: 1.3 M. After the operation, additional 3.6 M will be used.
Continue? [YES/no]: yes
Retrieving package fortune-1.0-872.71.x86_64 (1/1), 1.3 M (3.6 M unpacked)
Installing: fortune-1.0-872.71 [done]
slametyp@laptop:~>

Lalu tambahkan code berikut pada file $HOME/.bashrc agar fortune dijalankan setiap kali membuka shell baru:

# display a fortune on each shell session start
if [ -x /usr/bin/fortune ] ; then
   echo
   /usr/bin/fortune
   echo
fi

mod 2, short path on prompt

bash prompt default di openSUSE 11.1 menggunakan “full path on prompt”-nya, jadi bash akan menampilkan full path dari current working directory. Saya kurang suka dengan setting yg ini, karena jika berada di direktory yg ‘dalam’ maka prompt-nya jadi panjang. I hate this!

Tomorrow will be canceled due to lack of interest.

slametyp@laptop:~> cd /windows/C/Documents\ and\ Settings/slametyp/My\ Documents/Bluetooth\ Exchange\ Folder/
slametyp@laptop:/windows/C/Documents and Settings/slametyp/My Documents/Bluetooth Exchange Folder>

Wew… Screen-nya abis ama prompt aja, hehehe…😛 Untungnya, openSUSE menyediakan ‘cara’ untuk mengubahnya menjadi “sort path on prompt”. Edit file /etc/bash.bashrc, cari baris komentar “# With full path on prompt” (di baris 173, pada file Saya). Disable variable shell PS1 (dengan menambahkan tanda hash ‘#’ di awal baris) untuk full path on prompt kemudian enable PS1 (hapus tanda hash di awal baris) untuk short path.

PS1 adalah salah satu bash shell variable yg bertujuan untuk mengatur tampilan bash prompt. Selain PS1 juga PS2, PS3 dan PS4, tapi penggunaannya jarang sekali. Silahkan merujuk ke bash manual untuk informasi lebih lanjut.

         # With full path on prompt
#        PS1="${_t}${_u}:\w${_p} "
#        # With short path on prompt
         PS1="${_t}${_u}:\$(spwd)${_p} "
#        # With physical path even if reached over sym link
#        PS1="${_t}${_u}:\$(pwd -P)${_p} "

Kemudian save file /etc/bash.bashrc, session shell berikutnya sudah menggunakan sort path on prompt.

If you keep anything long enough, you can throw it away.

slametyp@laptop:/home/slametyp> cd /windows/C/Documents\ and\ Settings/slametyp/My\ Documents/Bluetooth\ Exchange\ Folder/
slametyp@laptop:..My Documents/Bluetooth Exchange Folder>

Nah.., lebih singkat bukan?😀

mod 3, PS1 yg baru

Yg paling nggak enak di mata kalau lagi pake shell itu warnanya yg abu-abu. Kadang jadi susah bedain mana yg shell prompt dan mana yg output command. Berbeda dengan user biasa, root punya shell prompt yg berwarna merah. Sangat membantu, tapi itu tidak cukup..😆

Bahwa bash prompt bisa dimodifikasi, memberi ide agar bash prompt bisa menampilkan lebih banyak informasi dibanding hanya username, hostname dan path. Well.., setidaknya begitulah shell prompt-Ku saat ini..😛

slametyp@laptop:/home/slametyp> echo $PS1
$(ppwd \l)\u@\h:$(spwd)>

Note:
Beberapa modifikasi prompt berikut ini, bekerja pada system GNU/Linux openSUSE 11.1 pada Laptop Saya. Implementasi pada system lain mungkin memerlukan modifikasi lebih lanjut. Silahkan merujuk pada manual bash atau howto ini.

mod 3.1, processor model
Meskipun informasi mengenai processor model ini statis, I think it’s fun to include it there..🙂 Informasi tentang processor bisa diperoleh dari file /proc/cpuinfo, dan pilihan item untuk ditampilkan adalah “model name” dan “bogomips”. Here is mine:

lametyp@laptop:/home/slametyp> grep -E ^'model name'\|^'bogomips' /proc/cpuinfo
model name      : AMD Turion(tm) 64 X2
bogomips        : 1607.28
model name      : AMD Turion(tm) 64 X2
bogomips        : 1607.28
slametyp@laptop:/home/slametyp>

Koq ada dua? Iya, karena kebetulan processor Saya adalah 64-bit dual core mobile CPU-nya AMD. Tapi nggak masalah, model name nantinya hanya diambil 1 saja, sedangkan bogomips akan dijumlahkan. Saya menggunakan command berikut:

slametyp@laptop:/home/slametyp> gawk -F': ' '/model name/ { x = $2 } ; /bogomips/ { y += $2 } END { printf("%s%s ",x,y) }' /proc/cpuinfo
AMD Turion(tm) 64 X2 3214.56 slametyp@laptop:/home/slametyp>

mod 3.2, processor thermal
Informasi ini tidak bisa Saya abaikan, CPU yg rusak karena overheat adalah yg paling Saya takutkan. Mengetahui temperatur CPU masih dalam batas wajar (70°C dalam batasan Saya), adalah hal yg melegakan😀 Informasi thermal bisa diperoleh dari command acpi, merupakan bagian dari paket acpid (Execute Actions at ACPI Events).

slametyp@laptop:/home/slametyp> acpi -Bt
     Thermal 1: ok, 62.0 degrees C
     Thermal 2: ok, 65.0 degrees C
slametyp@laptop:/home/slametyp> acpi -Bt | gawk '/1:/ { x = $4 } /2:/ { y = $4 } END { if ( y != "" ) print x,y ; else print x }'
61.0 64.0
slametyp@laptop:/home/slametyp>

mod 3.3, uptime
Uptime menjadi informasi berikut yg hendak Saya tambahkan ke prompt Saya. Abis suka lupa waktu kalau udah di depan Laptop. Kasihan juga dia kalau diajak begadang terus gak mati-mati..😛 Uptime bisa didapat dari command uptime, seperti berikut:

slametyp@laptop:/home/slametyp> uptime
5:26pm  up   4:48,  1 user,  load average: 0.13, 0.39, 0.52
slametyp@laptop:/home/slametyp> uptime | tr -s [:blank:] | cut -d ',' -f 1 | cut -d ' ' -f 4-
4:48
slametyp@laptop:/home/slametyp>

mod 3.4, bettery
Informasi baterai Laptop bisa diperoleh juga dengan command acpi, sama seperti thermal di atas. Output command acpi untuk beterai selain berisi informasi persen kapasitas baterai, juga ada status baterai sedang di-charge atau discharge.

slametyp@laptop:/home/slametyp> acpi -b
Battery 1: charged, 100%
slametyp@laptop:/home/slametyp> acpi -b | gawk ' { printf("%d%%%c", $4, $3) }'
100%c
slametyp@laptop:/home/slametyp>

Format informasi untuk baterai, Saya buat xx%y dengan xx adalah kapasitas baterai dan y adalah status charging, c untuk charge dan d untuk discharge.

My Custom Bash Prompt
Nah, sekarang waktunya menghias bash prompt. Untuk memberi warna prompt (seperti bash prompt-nya root), pertama-tama definisikan dulu alias untuk warna-warna yg akan digunakan, sebagai berikut:

# color definition
alias RED="echo -n '\[33[1;31m\]'"
alias GREEN="echo -n '\[33[1;32m\]'"
alias YELLOW="echo -n '\[33[1;33m\]'"
alias NO_COLOR="echo -n '\[33[0m\]'"

Untuk lebih jelasnya, silahkan baca di sini. Jadi $HOME/.bashrc Saya modifikasi dengan menambahkan code berikut:

#
# my-custom-bash-prompt
#
# color definition
alias RED="echo -n '\[33[1;31m\]'"
alias GREEN="echo -n '\[33[1;32m\]'"
alias YELLOW="echo -n '\[33[1;33m\]'"
alias NO_COLOR="echo -n '\[33[0m\]'"

# cpu parts
alias cpu_model_bogomips="gawk -F': ' '/model name/ { x = \$2 } ; /bogomips/ { y += \$2 } END { printf(\"%s%s\",x,y) }' /proc/cpuinfo"
alias cpu_temperature="acpi -Bt | gawk '/1:/ { x = \$4 } /2:/ { y = \$4 } END { if (y != \"\") print x,y ; else print x }'"

# uptime
#alias me_uptime="uptime | gawk '{ if (/day/) (x = \$3\$4\$5) ; else (x = \$3) } END { print gensub(\",\",\"\",((/day/)?2:1),x)}'"
alias me_uptime="uptime | tr -s [:blank:] | cut -d',' -f1 | cut -d' ' -f4-"

# battery
# format xx%y, where xx is battery capacity and y is battery charging status (c for charge and d for discharge)
alias bat_info="acpi -b | gawk '{ printf(\"%d%%%c\",\$4,\$3) }'"

# set the prompt_command
PS1="$(YELLOW)\$(cpu_model_bogomips) $(RED)\$(cpu_temperature) $(GREEN)(\$(me_uptime)) $(YELLOW)\$(bat_info) $(GREEN)(\$(date +%r))\n$(GREEN)${PS1}$(NO_COLOR)"

PS2="$(GREEN)> "

Hehehe.. Maybe it’s not a cool code, but it works for Me..😀 And this is my new custom bash prompt:

Konsole with Custom Bash Prompt
Konsole with Custom Bash Prompt
My Custom Bash Prompt

2 pemikiran pada “My Custom Bash Prompt

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