History adalah perintah shell-built in yang saya tidak bisa menggunakannya dalam skrip BASH. Jadi, apakah ada cara untuk mencapai ini menggunakan skrip BASH?
Ini skrip saya untuk Anda:
#!/bin/bash
history | tail -100 > /tmp/history.log
cd /tmp
uuencode history.log history.txt | mail -s "History log of server" hello@hel.com
sumber
histtest.sh: 5: set: Illegal option -o history
sh
berlari menilai dengan kata-kata yang tepat dari pesan kesalahan). Untuk mengakses riwayat bash, Anda perlu menggunakan bash (skrip dimulai dengan#!/bin/bash
atau#!/usr/bin/env bash
).Illegal option
(katanyaset: history: invalid option name
).set -o history
sejarah yang kemudian akan diisi dengan entri sepertiif [...
vars=$(...
dll.set -x
itu jauh lebih berguna.Saya tidak yakin apakah itu benar-benar menggunakan kemampuan histori saat menjalankan non-interaktif, jika tidak setiap skrip shell yang Anda jalankan akan mengacaukan histori perintah Anda.
Mengapa tidak langsung ke sumbernya
${HOME}/.bash_history
, gantihistory | tail -100
dengantail -100 ${HOME}/.bash_history
. (Jika Anda menggunakan cap waktu, Anda mungkin harus melakukan sesuatu di sepanjang barisgrep -v ^# ${HOME}/.bash_history | tail -100
).sumber
greq -v '^#[0-9]\+$'
(kadang-kadang saya "mengeksekusi" komentar di shell saya ...)history
dan outputgrep
metode ...history -a; history -c; history -r
. (tambahkan, hapus, baca)Jika Anda ingin menggunakan output dari
history
perintah dari sesi shell aktif dalam skrip, Anda dapat menggunakan alias untuk menjalankan perintah terlebih dahulu. Kemudian, dengan alias yang sama, Anda dapat memanggil sisa skrip. Dengan konfigurasi seperti itu, Anda pada dasarnya dapat mencapai hasil yang sama dengan memilikihistory
perintah dalam skrip yang sebenarnya.Misalnya, Anda dapat membuat alias seperti ini, dengan asumsi nama skrip adalah script.sh:
Dan ubah skrip menjadi ini:
Saya menemukan pertanyaan ini saat menulis proses untuk menggabungkan, mengurutkan dan menyinkronkan
~/bash_history
file di dua komputer sehingga akan mudah untuk mencari perintah yang saya gunakan di masa lalu.Jauh lebih mudah untuk memperbarui file kumulatif riwayat saya tanpa harus masuk ke shell baru untuk
~/bash_history
memperbarui. Untuk memonitor server, ini jelas tidak akan berfungsi, seperti yang disebutkan dalam jawaban lain.Penggunaan saya khususnya adalah:
Script
hby.sh
kemudian menarik semua entri unik dari semua~/.bash_history*
file.sumber
Riwayat bawaan tampaknya dinonaktifkan di dalam skrip shell. Lihat di sini: http://www.tldp.org/LDP/abs/html/histcommands.html
Saya belum menemukan dokumentasi resmi tentang ini.
sumber
Buat skrip bernama
script.sh
seperti di bawah ini. Itu menciptakan skrip bernama X dan menempatkan Y Jumlah baris sejarah Anda ke dalamnya.Kemudian jika Anda ingin membuat skrip untuk menyelesaikan tugas bernama "tugas" yang telah Anda kerjakan selama 14 baris terakhir jalankan
Lalu bersihkan riwayat Anda untuk membuat skrip yang bagus!
sumber
histtest.sh: 5: set: Illegal option -o history
Perintah histori dinonaktifkan secara default pada skrip bash itu sebabnya bahkan perintah histori tidak akan berfungsi dalam file .sh. untuk pengalihannya, silakan redirect file bash_history di dalam file .sh.
atau mekanisme histori dapat diaktifkan juga dengan menyebutkan file histori dan mengubah parameter run-time seperti yang disebutkan di bawah ini
catatan: disebutkan di atas dua baris di bagian atas file skrip. sekarang perintah sejarah akan bekerja dalam sejarah.
sumber
Setiap pengguna memiliki file histori sendiri yang merupakan hasil dari perintah history. Alih-alih menggunakan perintah histori dalam skrip shell Anda, Anda dapat menggunakan file histori untuk pengguna. Akan ada
.bash_history
file di direktori home pengguna, yang akan menjadi file histori untuk pengguna.sumber
Jawaban singkat :
gunakan
history -p
untuk melakukan ekspansi riwayat secara eksplisit.Contoh berikut.
Satu kasus penggunaan yang sering terjadi pada saya adalah:
Sejak bash saya
set -o histexpand
, biasanya yang saya lakukan adalah mengetikuntuk mengedit file-file yang terdaftar dengan perintah sebelumnya.
Sayangnya terkadang kesalahan terjadi, jadi saya aktifkan verifikasi oleh
shopt -s histverify
.Sekarang saya dapat memverifikasi ekspansi, dengan biaya satu Returnkunci tambahan .
Hari ini saya ingin membungkus detail-detail itu menjadi fungsi bash karena saya sering menggunakannya,
Di sini saya menggunakan dua bersarang
command substitution
, yang dalam untuk memperluas!!
ke perintah sebelumnya, yang luar untuk menjalankannya dan mendapatkan output.Sekarang saya dapat mencapai efek yang sama, hanya dengan tiga kunci, dan salah satunya adalah Return!
sumber