GNU/Linux >> Belajar Linux >  >> Linux

10 Contoh Perintah Lengkap Bash_Completion Linux yang Berguna (Penyelesaian Baris Perintah Bash pada Steroid)

Di Linux, saat mengetik perintah jika Anda menekan TAB dua kali, itu akan mencantumkan semua perintah yang tersedia yang dimulai dengan karakter yang diketik.

Ini bukan hal baru, mungkin Anda sudah mengetahuinya. Fungsionalitas ini disebut penyelesaian bash. Penyelesaian nama file dan direktori dasar tersedia secara default di baris perintah bash.

Namun, kita dapat meningkatkan penyelesaian bash ini, dan membawanya ke level berikutnya menggunakan perintah lengkap.

Tutorial ini menjelaskan bagaimana kita dapat menerapkan pelengkapan otomatis ke opsi dan argumen perintah menggunakan penyelesaian yang dapat diprogram.

Misalnya, setelah mengetik perintah tulis, jika Anda menekan tab dua kali, pelengkapan otomatis memberikan daftar pengguna untuk melakukan operasi tulis.

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

Dalam contoh berikut, ini akan menampilkan nama host yang tersedia untuk perintah telnet:

$ telnet [TAB][TAB]
localhost  dev-db  fileserver

Untuk mendapatkan penyelesaian yang dapat diprogram di terminal Anda, Anda hanya perlu menjalankan /etc/bash_completion seperti yang ditunjukkan di bawah ini,

# . /etc/bash_completion

Anda juga dapat menghapus komentar pada baris di bawah ini di /etc/bash.bashrc(dari ubuntu linux 13.04) sehingga Anda tidak perlu menjalankan perintah di atas secara eksplisit,

 enable bash completion in interactive shells
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

Jika Anda tidak menemukan baris ini dan file /etc/bash_completion, maka Anda hanya perlu menginstal paket yang disebut bash_completion oleh apt-get

1. Lihat penyelesaian bash yang ada

Setelah mengaktifkan penyelesaian bash yang dapat diprogram, ada serangkaian penyelesaian bash yang ditentukan. Perintah complete digunakan untuk mendefinisikan penyelesaian bash.

Untuk melihat penyelesaian bash yang ada, gunakan perintah lengkap seperti yang ditunjukkan di bawah ini.

 
complete -p | less

Opsi -p adalah opsional dalam contoh di atas.

2. Daftar Penyelesaian Standar di Bash

Bash menyediakan penyelesaian standar berikut untuk pengguna Linux secara default.

  1. Penyelesaian nama variabel
  2. Nama pengguna selesai
  3. Penyelesaian nama host
  4. Penyelesaian nama jalur
  5. Penyelesaian nama file

Kami membahas tentang ini di artikel penyelesaian standar bash kami sebelumnya.

3. Tentukan Penyelesaian untuk Memperoleh Perintah

Tentukan penyelesaian dengan perintah -c untuk mendapatkan daftar perintah yang tersedia sebagai argumen. Dalam contoh berikut, penyelesaian ditentukan untuk perintah mana,

$ complete -c which

$ which [TAB][TAB]
Display all 2116 possibilities? (y or n)

Seperti yang terlihat di atas, dengan menekan 'y', semua perintah akan terdaftar.

4. Tentukan Penyelesaian untuk Mendapatkan Direktori

Dengan opsi d, penyelesaian dapat didefinisikan untuk mendapatkan hanya nama direktori sebagai argumen. Dalam contoh berikut, penyelesaian yang ditentukan untuk ls,

$ ls
countfiles.sh  dir1/          dir2/          dir3/

$ complete -d ls

$ ls [TAB][TAB]
dir1/          dir2/          dir3/

Seperti yang terlihat di atas, menekan tab hanya menampilkan direktori.

5. Tentukan Penyelesaian untuk Mendapatkan Nama Pekerjaan Latar Belakang

Dengan lengkap, juga dimungkinkan untuk mendapatkan nama pekerjaan sebagai argumen untuk perintah. Opsi j digunakan untuk meneruskan nama pekerjaan sebagai argumen untuk memerintahkan pekerjaan seperti yang ditunjukkan di bawah ini,

$ jobs
[1]-  Stopped                 cat
[2]+  Stopped                 sed 'p'

$ complete -j ./list_job_attrib.sh

$ ./list_job_attrib.sh [TAB][TAB]
cat   sed

Berbicara tentang pekerjaan latar belakang, Anda juga harus mengetahui cara mengelola pekerjaan latar belakang Linux menggunakan contoh-contoh ini.

6. Penyelesaian dengan Awalan dan Akhiran

Penyelesaian dapat didefinisikan dengan awalan yang diinginkan untuk ditambahkan dan akhiran untuk ditambahkan dengan penyelesaian yang sebenarnya. Dalam contoh berikut, awalan dan akhiran didefinisikan untuk list_job_attrib.sh,

$ jobs 
[1]+  Stopped                 cat

$ complete -P '">' -S '<"' ./list_job_attrib.sh

$ ./list_job_attrib.sh [TAB][TAB]

$ ./list_job_attrib.sh ">cat<"

7. Penyelesaian Nama File dan Direktori dengan Pengecualian

Pertimbangkan bahwa skrip menyelesaikan prosesnya, output ditulis ke direktori output sebagai berikut

$ cd output/

$ ls
all_calls.txt   incoming_calls.txt   outgoing_calls.txt   missed_calls.txt
parser_mod.tmp  extract.o

Di atas, jika Anda perlu mengabaikan file .tmp dan .o untuk pelengkapan otomatis dengan perintah ls,

$ export FIGNORE='.tmp:.o'

$ complete -f -d ls

$ cd output

$ ls [TAB][TAB]
all_calls.txt   incoming_calls.txt   outgoing_calls.txt   missed_calls.txt

FIGNORE adalah variabel shell yang berisi akhiran nama file dan yang dikecualikan dalam pelengkapan otomatis.

8. Pisahkan String dengan IFS untuk mendapatkan Nilai Penyelesaian

Daftar kata dapat disebutkan dengan opsi -W dan itu akan dibagi dengan nilai dalam variabel IFS. Kemudian setiap kata yang dihasilkan diperluas dan akan ditampilkan untuk diselesaikan,

$ export IFS=" "

$ complete -W "bubble quick" ./sort_numbers.sh

$ ./sort_numbers.sh [TAB][TAB]
bubble   quick

Seperti yang dinyatakan di atas, setelah memisahkan string dengan pembatas IFS, kata akan diperluas, jadi juga memungkinkan untuk memiliki ini sebagai variabel seperti yang ditunjukkan di bawah ini,

$ echo $SORT_TYPE1
bubble

$ echo $SORT_TYPE2
quick

$ complete -W "$SORT_TYPE1 $SORT_TYPE2" ./sort_numbers.sh
$ ./sort_numbers.sh [TAB][TAB]
bubble   quick

9. Tulis Fungsi Anda Sendiri untuk Menghasilkan Penyelesaian

Ini memungkinkan Anda untuk memasukkan fungsi untuk menentukan penyelesaian. Dengan opsi -F, nama fungsi diteruskan ke perintah lengkap dan dieksekusi untuk menghasilkan penyelesaian. Misalnya, fungsi ditulis seperti yang ditunjukkan di bawah ini,

_parser_options()
{
  local curr_arg;

  curr_arg=${COMP_WORDS[COMP_CWORD]}

  COMPREPLY=( $(compgen -W '-i --incoming -o --outgoing -m --missed' -- $curr_arg ) );
}

dimana pada fungsi di atas,

  1. COMPREPLY :array menyimpan hasil penyelesaian yang ditampilkan setelah menekan [TAB][TAB]
  2. COMP_WORDS :deretan kata yang diketik pada baris perintah
  3. COMP_CWORD :indeks untuk array COMP_WORDS dan menggunakan kata-kata posisi yang berbeda ini pada baris perintah dapat diakses.
  4. compgen :-W menyimpan kemungkinan penyelesaian dan masing-masing argumen dipilih berdasarkan $current_arg

Fungsi ini hadir dalam file parser_option bersumber seperti yang ditunjukkan di bawah ini,

$ source parser_option

Tautkan fungsi ini ke skrip parser Anda seperti yang ditunjukkan di bawah ini,

$ complete -F _parser_options ./parser.pl

$ ./parser.pl [TAB][TAB]
-i       --incoming       -o       --outgoing       -m       --missed

Seperti yang terlihat di atas, opsi untuk parser dihasilkan oleh fungsi _parser_options().

Catatan :Lihat /etc/bash_completion untuk melihat lebih banyak fungsi untuk penyelesaian yang dapat diprogram.

10. Spesifikasi Sekunder saat Primer Tidak Menghasilkan Apa Pun

Jika tidak ada kecocokan yang dihasilkan oleh spesifikasi penyelesaian yang ditentukan, maka comp-option diambil untuk penyelesaian yang disebutkan dengan opsi -o.

$ complete -F _count_files -o dirnames ./countfiles.sh

Seperti di atas, penyelesaian didefinisikan dengan fungsi _count_files untuk file ./countfiles.sh. Jika fungsi _count_files() tidak menghasilkan kecocokan apa pun, maka penyelesaian direktori akan dicoba.

$ ls 
countfiles.sh    dir1/      dir2/      dir3/

$./countfiles.sh [TAB][TAB]
dir1    dir2    dir3

Linux
  1. 12 Contoh Perintah Wget yang Berguna di Linux

  2. 25 Berguna menemukan Contoh Praktis Perintah di Linux

  3. ls Perintah di Linux:17 Contoh yang Berguna Dijelaskan

  1. 15 Contoh Untuk Menguasai Sejarah Baris Perintah Linux

  2. 5 Penyelesaian Standar Tersedia di Baris Perintah Bash Linux

  3. 14 Contoh Perintah "cat" yang Berguna di Linux

  1. Cara Menghapus Riwayat Baris Perintah BASH di Linux

  2. 20 Contoh Perintah Docker yang Berguna di Linux

  3. 14 Contoh Perintah 'ls' yang Berguna di Linux