Saya perlu menulis skrip yang menulis ke file berapa kali skrip ini telah dieksekusi.
Bagaimana saya bisa melakukan itu?
command-line
bash
scripts
Milen Grigorov
sumber
sumber
echo $(( $(cat countfile 2>/dev/null || echo 0) + 1 )) > countfile
$(…)
akan dieksekusi sebelum yang lain (terutama sebelum>
). Tapi saya sering menggunakan$(cat countfile 2>/dev/null || echo 0)
bagian ini untuk mendapatkan default yang wajar jika file tidak ada. Kita bisa menambahkansponge
:-) agar aman.flock
perintah untuk mencegah kondisi balapan. Lihat unix.stackexchange.com/a/409276Biarkan skrip membuat file log, tambahkan misalnya satu baris di skrip Anda di akhir:
Dengan cara ini Anda dapat memformat cara Anda sendiri menampilkan tanggal dan waktu, tetapi jika Anda hanya ingin pergi dengan tanggal dan waktu penuh (dan
HH:MM:SS
merupakan format yang dapat diterima untuk Anda), Anda juga dapat menggunakan:Maka Anda bisa melakukan:
Yang menghitung karakter baris baru dan memberi Anda perkiraan berapa banyak baris di dalam file log. Hingga Anda dapat melihat di dalam file log bahkan ketika itu dijalankan. Untuk menyesuaikannya dengan kebutuhan Anda, Anda dapat mengubah jalur dan nama yang digunakan untuk masuk. Saya baru saja melakukan contoh di sini yang menyimpan logfile di
~
.Jadi misalnya Anda ingin skrip menambahkan hitungan ini ke baris yang Anda tambahkan di akhir skrip Anda, Anda bisa melakukan sesuatu seperti ini di awal skrip Anda:
Dan ubah baris Anda di akhir skrip ke sesuatu termasuk bahkan informasi itu:
sumber
Solusi ini menggunakan pendekatan yang sama dengan jawaban Byte Commander tetapi tidak bergantung pada aritmatika shell atau Bashism lainnya.
Pengalihan aliran
/dev/null
(untuk menekan pesan kesalahan di pengalihan berikutnya dari inputread
perintah jika file counter tidak ada yang diharapkan),sumber
Pendekatan yang berbeda
File penghitung terpisah memiliki kekurangan:
Jadi jawaban ini tidak menghilangkan file penghitung yang terpisah dan menempatkan hitungan dalam skrip bash itu sendiri!
flock
jaminan bahwa untuk sesaat tidak mungkin bagi dua pengguna untuk menjalankan skrip pada saat yang sama.Kode
Pendekatan lain menggunakan File Log
Mirip dengan jawaban Videonauth, saya menulis jawaban file log di sini: Skrip Bash untuk mempertahankan jejak audit / log file yang diakses untuk login setiap kali kekuatan root digunakan dengan
gedit
ataunautilus
.Hasil tangkapannya daripada menggunakan
gksu
skrip namanyagsu
dan memanggilpkexec
cara "modern" menggunakan sudo di GUI, jadi saya diberitahu.Keuntungan lain adalah tidak hanya mengatakan setiap kali kekuatan root digunakan dengan
gedit
tetapi mencatat nama file yang telah diedit. Ini kodenya.~/bin/gsu
:/usr/local/bin/log-file
:Isi file log
gsu-log-file-for-gedit
setelah beberapa pengeditan:sumber