Sementara Googling cara mengkustomisasi prompt shell saya melalui variabel PS1, saya melihat tabel karakter khusus yang dapat digunakan. Khususnya:
\! the history number of this command
\# the command number of this command
"Nomor sejarah" tampaknya lebih umum digunakan, dan saya tahu cara menggunakan perintah seperti !523
mengulang perintah dari riwayat. Tapi saya tidak tahu apakah "nomor perintah" memiliki fungsi yang sama. Saya sudah mencoba memasukkan \#
variabel PS1 saya, dan sepertinya mengeluarkan jumlah perintah yang dimasukkan dalam sesi tertentu (tidak seperti \!
, yang tetap ada setelah keluar / keluar).
Adakah yang tahu cara menggunakan "nomor perintah" dengan cara yang nyaman atau bermakna?
bash
command-line
command-history
Orang Lagrangian
sumber
sumber
Jawaban:
Nomor perintah Bash hanya untuk tampilan.
Pertama, beberapa latar belakang dari
bashref
:Menyelam melalui sumber, dalam
parse.y
kita melihat bahwa'\#'
menyelesaikan ke variabel statis globalcurrent_command_number
:yang hanya memiliki satu kegunaan lain: in
eval.c
, ini bertambah saat menjalankan perintah:Yang disimpan hanyalah angka, bukan perintah aktual atau bahkan nomor riwayat yang setara. Jadi, setelah eksekusi setiap perintah, bash lupa perintah apa yang terkait dengan nomor perintah apa, membuat nomor perintah tidak dapat digunakan untuk apa pun selain tampilan dan referensi gulir.
sumber
Sejauh yang saya tahu (dan ini tampaknya dikonfirmasi oleh penelitian Anda), tidak ada cara untuk merujuk pada angka ajaib itu secara interaktif, atau tidak melalui
fc
atau!n
pintasan. Yang tampaknya hanya merujuk pada posisi absolut dalam daftar sejarah, bukan posisi relatif sejak shell spesifik ini dimulai (yang\#
mengacu pada, seperti yang Anda tunjukkan dengan benar).Satu-satunya cara yang saya temukan untuk membuat ini lebih baik di sini adalah dengan mengatur yang berikut:
Seperti itu:
1000
, yang membuatnya lebih mudah untuk mengidentifikasi di mana saya berada dalam suatu sesiPada dasarnya, ini mengubah prompt saya yang dimodifikasi (
PS1="\\!$ "
) dari:untuk:
... yang membuatnya sedikit lebih bersih di awal. Tapi itu mungkin bukan jawaban yang Anda cari. :)
(Ngomong-ngomong, saya juga mencari solusi untuk zsh, dan sepertinya tidak memiliki padanan
\#
, sehingga tidak membantu sama sekali.)sumber