Suntikkan baris ke bash history

9

Secara default, bash memuat baris dari ~/.bash_historyke histori. Apakah mungkin menambahkan file khusus untuk dimuat? Saya ingin menyuntikkan file yang berisi perintah yang sering saya gunakan dan mengaksesnya melalui pencarian bawaan.

rgtk
sumber
2
Biasanya orang menambahkan alias untuk perintah yang sering digunakan ...
HBruijn
Itu keren. Tapi bukan itu masalahnya - saya menggunakan alias untuk perintah yang saya gunakan terus-menerus tetapi saya memiliki banyak perintah yang memiliki banyak argumen yang ingin saya modifikasi berdasarkan keadaan.
rgtk
4
Anda harus menuliskan beberapa jenis modifikasi file, yang terdengar agak gila dan mungkin tidak berfungsi. Buat perintah lama Anda menjadi skrip shell yang menerima argumen dan menjatuhkannya /usr/local/binatau sesuatu
Wesley
Jika Anda sering menggunakannya, bukankah itu akan ada dalam riwayat Anda?
Deklarasikan fungsi .bashrc?
Mark K Cowan

Jawaban:

13

Saya membuatnya sederhana dengan alias h='history|grep'dimuat ke profil Bash saya.

Jadi alur kerja saya adalah h command, misalnya:h hpssa

#  h hpssa
  202  05-28-2015 11:54:33  hpssacli
  217  05-28-2015 11:54:33  hpssa -start
  225  05-28-2015 11:54:33  hpssacli -stop
  226  05-28-2015 11:54:33  hpssa -stop
  228  05-28-2015 11:54:33  hpssa -start

Jika saya ingin menjalankan " hpssa -stop", saya cukup mengetik!226


Ini hanya pendekatan saya, tetapi mungkin Anda bisa memodifikasi cara Anda mengingat item riwayat. Saya pikir tidak masuk akal untuk benar-benar menyuntikkan data ke dalam file histori.

putih
sumber
trik yang bagus, mencuri yang itu
wim
Sarankan Anda mungkin ingin melihat apa yang dilakukan Ctrl-R untuk mencari kembali di riwayat Anda. Bersiaplah untuk meledakkan pikiran Anda ...
2
@CameronKerr Lihatlah jawaban tepat di bawah yang satu ini ( serverfault.com/a/695115/120438 ). Kelemahan menggunakan Ctrl + R dalam kasus khusus ini adalah memberi Anda perintah yang relevan satu per satu, sementara ewwhite's Pendekatan mengembalikan daftar semua perintah yang relevan.
Jenny D
Meskipun ini adalah trik yang bagus, itu tidak menjawab pertanyaan sama sekali. Saya gagal memahami bagaimana ini adalah jawaban dengan suara tertinggi. Penggunaan saya adalah bahwa saya memiliki gambar buruh pelabuhan yang terus kehilangan riwayatnya ketika saya keluar. Saya pikir akan lebih baik jika saya bisa mengirimkan file histori melalui baris perintah kedocker run ...
kumarharsh
@kumar_harsh Sulit menyenangkan.
ewwhite
7

Saya dulu sangat bergantung pada Ctrl-R( reverse-search-historyperintah Readline) yang mencari mundur melalui sejarah untuk mengambil perintah panjang yang sebelumnya dimasukkan tapi saya sekarang lebih suka menggunakan alias dan skrip / fungsi shell. Bagaimanapun, perintah Bash historybuiltin dapat digunakan untuk memuat daftar perintah khusus ke dalam riwayat Anda saat ini.

history -r [filename]

Dari halaman bash man:

Baca konten file riwayat dan tambahkan ke daftar riwayat saat ini.

Otomasi start-up

Saya baru saja mencoba meluncurkan perintah ini secara otomatis dengan menambahkannya sebagai baris terakhir di blog saya .bashrc. Namun, perintah dari file riwayat khusus saya tidak tersedia ketika saya memulai shell baru. Tampaknya riwayat shell hanya diambil dari .bash_historyfile default : setelah file start-up diproses dan sesaat sebelum prompt disajikan untuk shell interaktif. Sayangnya, sepertinya tidak ada cara mudah untuk mengotomatisasi ini.

Anthony Geoghegan
sumber
2

Seperti yang diamati oleh @AnthonyGeoghegan, riwayat dimuat setelah file startup diproses. Itu menawarkan cara berbeda untuk memuat riwayat yang diinginkan dalam file startup:

mv .bash_history .bash_history.tmp
cat .extra_hist .bash_history.tmp > .bash_history
# or swap them, to put the extra stuff at the end of the history, for
# quicker ^R access.

Perhatikan bahwa pendekatan ini dapat menghasilkan banyak salinan dari perintah khusus Anda yang ditambahkan ke .bash_history Anda, seiring waktu. Anda dapat membungkus perintah khusus Anda dengan baris komentar, sehingga Anda dapat dengan mudah menemukan dan menghapusnya (via, misalnya, sed) sebagai bagian dari mengisi file .bash_history. Sesuatu seperti:

cp .extra_hist .bash_history
sed '/: remove from here/,/:remove to here/d' .bash_history >> .bash_history
schnitz
sumber