Bash histori dengan cap waktu

14

Saya ingin menjaga stempel waktu pada perintah yang masuk ke Bash $ HISTFILE saya, mungkinkah?

Saya tidak berhasil mengaturnya menggunakan man bashsebagai sumber informasi.

Pilihan saya yang lain adalah sebagai berikut:

function thebanana() {
  local -r -a bash_commands=(
    "ls"
    # ... more coconut commands
  )
  for bash_command in "${bash_commands[@]}"; do
    printf "${bash_command}"
    printf ":"
  done
}
export HISTFILE=banana
export HISTIGNORE="$(thebanana)"
export HISTSIZE=999999
export HISTFILESIZE=999999999
export HISTCONTROL=ignoredups:erasedups

Saya seharusnya menyebutkan saya di OS X Mountain Lion (menghela nafas). uname -amemberi saya:

Darwin CoconutMac.local 12.2.0 Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64 x86_64

dan echo $BASH_VERSIONmemberi saya:

3.2.48(1)-release

Sudah mencoba menambahkan ini:

export HISTTIMEFORMAT='%b %d %I:%M:%S %p '

dan itu hanya awalan cap waktu semacam ini untuk perintah:

#1349057791

Saya mencoba mengulang kembali variabel ( echo $HISTTIMEFORMAT), ia memiliki nilai yang tepat.

Menarik!

Saya bahkan menghapus. Profil sepenuhnya untuk men-debug ini. Masih hanya stempel waktu lucu:

#1349058320

Saya tidak tahu bagaimana cara memecahkan masalah ini lebih lanjut ... :(

Solusi : Saya menggunakan skrip yang membaca $ HISTFILE secara langsung, bukan riwayat bawaan sehingga cap waktu berbasis zaman (detik sejak Waktu Universal Terkoordinasi (UTC) 1 Januari 1970) tidak diterjemahkan menggunakan string pemformatan tanggal . Biasa-biasa historysaja, saya akan menggunakannya.

Robottinosino
sumber
2
Sudahkah Anda mencoba pengaturan HISTTIMEFORMAT?
jw013
Mungkin saya mendapatkan format strftime yang salah. Akan membantu jika halaman manual menyertakan setidaknya beberapa contoh .. +% Y-% m-% d% H-% M-% S?
Robottinosino

Jawaban:

14

Ya, letakkan ini di ~/.bashrc:

export HISTTIMEFORMAT='%F %T '

Kemudian, jalankan perintah berikut:

. ~/.bashrc
history

Ini akan terlihat seperti ini:

 (...)
 5200  2012-09-30 23:55:37 find -printf '%Ts %f\n'
 5201  2012-10-01 00:00:58 ls
 5202  2012-10-01 00:03:45 cd
 (...)

Penjelasan dari output:

  • col pertama adalah unik id
  • yang kedua adalah tanggal, ketiga adalah jam
  • terbaru adalah baris perintah Anda
Gilles Quenot
sumber
3
Tidak, tidak berfungsi di OSX .. :( Kemungkinan itulah masalahnya. OS yang aneh.
Robottinosino
Benarkah source ~/.bashrc?
Gilles Quenot
Saya pasti melakukannya. Itu melakukan "sesuatu": menambahkan baris komentar sebelum perintah dengan cap waktu numerik: # 1349057149
Robottinosino
1
@Robottinosino Ya baris komentar adalah format yang diharapkan. Untuk menampilkan perintah dengan waktu yang diformat, gunakan historyperintah builtin, jangan melihat file sejarah secara langsung.
jw013
1
Apakah mungkin untuk memiliki cap waktu dalam file histori yang direkam menggunakan HISTTIMEFORMAT? Saya tidak pernah menggunakan historyperintah, sebaliknya saya menggunakan editor teks untuk menemukan perintah yang saya cari, dan alangkah baiknya memiliki referensi tanggal yang dapat dibaca manusia.
pergi