it-swarm-id.com

Memahami tanda seru (!) Di bash

Saya menggunakan

history | less

untuk mendapatkan baris-baris perintah sebelumnya dan dari angka-angka di sisi kiri saya menemukan baris yang saya ingin ulangi (mis. 22) dan melakukan

!22

pada command Prompt dan berhasil - mengeksekusi sekumpulan perintah pada baris yang saya lakukan saat itu. Saya tidak tahu di mana tanda seru digunakan, apa yang diwakilinya dalam hal tindakan yang diambil oleh bash, dan di mana menggunakannya. Dari dokumentasi saya tidak melihat penjelasan yang 'nyata'.

112
Vass

! adalah fitur yang awalnya muncul di C Shell , kembali pada hari-hari sebelum Anda dapat mengandalkan terminal untuk memiliki tombol panah. Ini sangat berguna jika Anda menambahkan nomor perintah saat ini ke Prompt (PS1="\!$ ") sehingga Anda dapat dengan cepat melihat layar Anda untuk mendapatkan nomor untuk perintah sebelumnya.

Sekarang Anda dapat menggunakan tombol panah dan hal-hal seperti Ctrl-R untuk mencari sejarah perintah, saya tidak melihat banyak kegunaan untuk fitur ini.

Salah satu varian yang mungkin masih berguna bagi Anda adalah !!, yang menjalankan kembali perintah sebelumnya. Sendiri, saya tidak menemukan !!Enter lebih cepat dari sekadar Enter, tetapi bisa membantu ketika digabungkan menjadi perintah yang lebih besar.

Contoh: Umum kesalahan pilot pada Sudo sistem berbasis adalah untuk melupakan awalan Sudo pada perintah yang membutuhkan hak istimewa ekstra. Seorang pemula mengetik ulang seluruh perintah. Siswa yang rajin mengedit perintah dari sejarah perintah Shell. Yang tercerahkan adalah tipe Sudo !!.

Bash memungkinkan Anda menonaktifkan ! memproses dalam Shell dengan set +o histexpand atau set +H. Anda dapat menonaktifkannya di Zsh dengan set -K.

157
Warren Young

Jika tidak ada jawaban yang lebih panjang di sini pasti ada satu di Super User, karena saya sudah membaca satu baru-baru ini. Di bash man page Anda dapat menemukan bagian besar berjudul SEJARAH EKSPANSI tentang masalah ini.

Anda dapat melakukan seluruh Host lebih dari sekedar menjalankan perintah terakhir, atau perintah nomor X. Anda dapat melakukan hal-hal seperti !cat untuk menjalankan perintah terakhir yang dimulai dengan cat. Atau !?bash?:s/bash/csh/ menjalankan perintah terakhir yang berisi bash tetapi menggantinya dengan csh.

52
Cry Havok

Banyak yang bisa dilakukan dengan ! seperti:

  • jalankan perintah yang diketik sebelum 3 perintah: !-3
  • jalankan perintah yang dimulai dengan !ls

dan masih banyak lagi. Lihat 15 Contoh Ekspansi Sejarah Bash Linux yang Harus Anda Ketahui

40
user379997

Tentu saja Anda bisa melakukan !! untuk menggunakan kembali perintah terakhir di bash Shell. Dan kemudian ada !$ untuk menggunakan kembali bagian terakhir dari perintah terakhir Anda.

misalnya lihat beberapa file

less path/to/your/file.txt

Jika sekarang Anda ingin mengedit file yang sama, Anda dapat menggunakan !$ untuk mendapatkan hanya path file dari perintah terakhir

vim !$

EDIT:

Anda dapat menggunakan semua argumen dari perintah sebelumnya dengan !*

mis .: Ini akan membuat beberapa file dan menghapus semuanya

$ touch a.txt b.txt c.txt d.txt
$ rm !*

Sekali lagi, Anda dapat menggunakan argumen spesifik dari perintah sebelumnya

misalnya Ini menciptakan 4 file dan akan menghapus file ke-3 (c.txt)

$ touch a.txt b.txt c.txt d.txt
$ rm !:3

Demikian pula, Anda dapat menggunakan berbagai argumen dari perintah terakhir sebagai berikut

$ touch a.txt b.txt c.txt d.txt
$ rm !:2-4

Ini akan menggunakan kembali argumen 2 hingga 4 yang mengevaluasi ekspresi menjadi rm b.txt c.txt d.txt

6

Seorang teman saya mengirimi saya email ini:

Ini adalah bagian dari GNU history library. Dalam bash, ini digunakan untuk menjalankan kembali perintah dalam histori Anda. Jika Anda ingin menjadi hardcore, grep untuk history_expansion_char di bash-4.1/lib/readline/histexpand .c untuk detail implementasi.

4
Vass