Di sini saya akan menunjukkan satu masalah dengan
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
dan
PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"
Jika Anda menjalankan source ~ / .bashrc, $ PROMPT_COMMAND akan menjadi seperti
"history -a; history -c; history -r history -a; history -c; history -r"
dan
"history -a; history -n history -a; history -n"
Pengulangan ini terjadi setiap kali Anda menjalankan 'source ~ / .bashrc'. Anda dapat memeriksa PROMPT_COMMAND setelah setiap kali Anda menjalankan 'source ~ / .bashrc' dengan menjalankan 'echo $ PROMPT_COMMAND'.
Anda bisa melihat beberapa perintah tampaknya rusak: "history -n history -a". Tapi kabar baiknya adalah masih berfungsi, karena bagian lain masih membentuk urutan perintah yang valid (Hanya melibatkan beberapa biaya tambahan karena menjalankan beberapa perintah berulang-ulang. Dan tidak begitu bersih.)
Secara pribadi saya menggunakan versi sederhana berikut:
shopt -s histappend
PROMPT_COMMAND="history -a; history -c; history -r"
yang memiliki sebagian besar fungsi sementara tidak ada masalah seperti yang disebutkan di atas.
Hal lain yang perlu dikemukakan adalah: sebenarnya tidak ada keajaiban . PROMPT_COMMAND hanyalah variabel lingkungan bash biasa. Perintah di dalamnya dieksekusi sebelum Anda mendapatkan bash prompt (tanda $). Misalnya, PROMPT_COMMAND Anda adalah "echo 123", dan Anda menjalankan "ls" di terminal Anda. Efeknya seperti menjalankan "ls; echo 123".
$ PROMPT_COMMAND="echo 123"
output (Sama seperti menjalankan 'PROMPT_COMMAND = "echo 123"; $ PROMPT_COMMAND'):
123
Jalankan yang berikut ini:
$ echo 3
keluaran:
3
123
"history -a" digunakan untuk menulis perintah histori dalam memori ke ~ / .bash_history
"history -c" digunakan untuk menghapus perintah history dalam memori
"history -r" digunakan untuk membaca perintah history dari ~ / .bash_history ke memori
Lihat penjelasan perintah sejarah di sini: http://ss64.com/bash/history.html
PS: Seperti yang ditunjukkan oleh pengguna lain, ekspor tidak perlu. Lihat: menggunakan ekspor di .bashrc