Saya menulis skrip sederhana untuk memahami riwayat bash saya untuk menemukan string tertentu. Di baris perintah, saya bisa melakukan hal berikut, yang berfungsi dengan baik:
history | grep git
Namun, ketika saya membuat skrip bash dengan perintah yang sama seperti di atas, tiba-tiba history
tidak menghasilkan apa-apa:
#!/bin/bash
history | grep git
Ketika saya menghapus baris pertama #!/bin/bash
, skrip saya berfungsi lagi. Apa yang terjadi disini? Bagaimana saya bisa menggunakan history
di dalam skrip bash?
bash
shell-script
command-history
Martin Vegter
sumber
sumber
bash
pengguna v3, karena frustrasi, haha). Setidaknya bagi Martin solusi saya sangat membantu, itu (setidaknya) kenyamanan.Saat Anda menjalankan skrip bash shell, misalnya dengan menjalankan file yang dapat dieksekusi dengan garis shebang
#!/bin/bash
, skrip dijalankan dalam shell non-interaktif. Salah satu fitur dari shell non-interaktif adalah sejarah dinonaktifkan. Jadi jika Anda ingin skrip Anda dapat menggunakan riwayat, Anda harus melakukan sesuatu seperti ini:Tentu saja, dalam hal ini Anda bisa saja melakukan:
Karena kedua hal di atas mengharuskan file histori (
~/.bash_history
) diperbarui, yang hampir pasti tidak akan.Saya tidak yakin bagaimana Anda menjalankan skrip Anda setelah garis shebang dihapus. Sumber file (mis., Dengan
.
) tidak sama dengan menjalankan skrip karena perintah dijalankan di shell saat ini, yang memang memiliki riwayat diaktifkan.sumber
history -a
setelah perintah yang ditetapkan untuk memastikan perintah terakhir ditambahkan ke file terlebih dahulu?