Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เรียนรู้ 5 ฟีเจอร์ Bash Completion ในตัว (Built-in) สำหรับ Linux Command Line ที่เร็วขึ้น

Bash ใน Linux มีการทำงานอัตโนมัติ (Completion) มาตรฐาน 5 แบบที่พร้อมใช้งานทันที:

  1. Variable name completion
  2. Username completion
  3. Executable completion
  4. Filename และ Directory completion
  5. Hostname completion

1. Variable Name Completion

พิมพ์ $ แล้วกด Tab สองครั้ง จะแสดงตัวแปร Shell ทั้งหมด:

$ echo $[TAB][TAB]
$_ $COMP_POINT $HOSTTYPE $PS1 $_backup_glob $COMPREPLY $IFS $PS2 $BASH $COMP_TYPE $inx $PS4 $BASH_ALIASES $COMP_WORDBREAKS $LANG $PWD $BASH_ARGC $COMP_WORDS $LANGUAGE $RANDOM $BASH_ARGV $cur $LESSCLOSE $redir $BASH_CMDS $cword $LESSOPEN $SECONDS $BASH_COMMAND $DIRSTACK $LINENO $SHELL $BASH_COMPLETION_COMPAT_DIR $DISPLAY $LINES $SHELLOPTS $BASH_LINENO $errx $LOGNAME $SHLVL $BASHOPTS $EUID $LS_COLORS $split $BASHPID $exclude $MACHTYPE $SUDO_COMMAND $BASH_REMATCH $flag $MAIL $SUDO_GID $BASH_SOURCE $FUNCNAME $MAILCHECK $SUDO_UID $BASH_SUBSHELL $GROUPS $OLDPWD $SUDO_USER $BASH_VERSINFO $__grub_script_check_program $OPTERR $suffix $BASH_VERSION $HISTCMD $OPTIND $TERM $__colormgr_commandlist $HISTCONTROL $OSTYPE $UID $COLORTERM $HISTFILE $outx $USER $COLUMNS $HISTFILESIZE $PATH $USERNAME $COMP_CWORD $HISTSIZE $PIPESTATUS $words $COMP_KEY $HOME $PPID $XAUTHORITY $COMP_LINE $HOSTNAME $prev $_xspecs

2. Username Completion

พิมพ์ ~ แล้วกด Tab สองครั้ง จะแสดงชื่อผู้ใช้จาก /etc/passwd:

$ cd ~[TAB][TAB]
~bala/ ~raj/ ~jason/ ~randy/ ~john/ ~ritu/ ~mayla/ ~thomas/ ~nisha/ ~www-data

หมายเหตุ: ไม่ได้ดึงจากโฮมไดเรกทอรี แต่อ่านจาก /etc/passwd โดยตรง

3. Pathname Completion สำหรับ Executable

เมื่อพิมพ์พาธของไฟล์ที่มีสิทธิ์รัน (execute permission) และกด Tab จะทำงานอัตโนมัติ:

$ ls -l /etc/init.d/reboot
-rwxr-xr-x 1 root root 639 Jan 30 2013 /etc/init.d/reboot
$ /etc/init.d/reb[TAB][TAB]
$ /etc/init.d/reboot

ถ้ามีหลายตัวเลือก จะแสดงรายการทั้งหมด

4. Filename และ Directory Completion

ทำงานที่ตำแหน่งอาร์กิวเมนต์ที่ 2 เป็นต้นไป ไม่ตรวจสอบสิทธิ์ แค่แสดงไฟล์/โฟลเดอร์ทั้งหมด:

$ ls countfiles.sh dir1 dir2 dir3
$ cat [TAB][TAB]
countfiles.sh dir1 dir2 dir3
$ cat c[TAB][TAB]
$ cat countfiles.sh

ถ้ามีไฟล์เยอะมาก จะแสดงข้อความเตือน:

Display all 228 possibilities? (y or n)

5. Hostname Completion

พิมพ์ @ แล้วกด Tab สองครั้ง จะแสดงโฮสต์เนมจาก /etc/hosts:

$ ssh john@[TAB][TAB]
@dev-db @fileserver @qa-server @prod-db @localhost @web-server

ใช้ได้กับคำสั่งอื่นที่รับโฮสต์เนมหลัง @ เช่น scp:

$ scp filename.txt john@[TAB][TAB]
@dev-db @fileserver @qa-server @prod-db @localhost @web-server