Saya ingin mengkonfigurasi bash untuk menjalankan clearperintah setiap kali saya mengetik beberapa perintah di terminal (sebelum menjalankan perintah saya). Bagaimana saya bisa melakukan itu?
Saya menggunakan Linux Debian.
Saya ingin mengkonfigurasi bash untuk menjalankan clearperintah setiap kali saya mengetik beberapa perintah di terminal (sebelum menjalankan perintah saya). Bagaimana saya bisa melakukan itu?
Saya menggunakan Linux Debian.
Jawaban:
Bash memiliki kait prekomand . Semacam.
preexec () {
clear
}
preexec_invoke_exec () {
[ -n "$COMP_LINE" ] && return # do nothing if completing
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; # obtain the command from the history, removing the history number at the beginning
preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG
Enter, sebelum menjalankan perintah. Ini berfungsi seperti ini untuk saya. Preexec hook dieksekusi untuk setiap perintah interaktif, tidak masalah apakah perintah itu built-in atau perintah eksternal atau banyak perintah.
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;masalahnya adalah PROMPT_COMMAND sedang dijalankan dan juga terjebak setelah perintah yang sebenarnya; Dapatkah seseorang memberitahu saya mengapa local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;ada di sini?
history -1mencetak baris perintah terakhir, dengan nomor riwayat di depan. Filter sed menghapus nomor sejarah.
bind 'RETURN: "\e[1~clear; \e[4~\n"'
Setelah itu setiap kali Anda menekan returnalih-alih hanya menulis \nitu akan pindah ke awal baris, masukkan teks clear;, lalu pindah ke akhir dan masukkan \nseperti yang diharapkan.
clearperintah dengan perintah.
cleardieksekusi sebelum perintah dan output perintah tidak hilang. Namun dalam kasus dengan prompt itu.
clear;output untuk setiap tambahan \n.
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""ia akan pindah ke awal, ketik ls;#komentar apa yang ada di sana, dan jalankan lsperintah dengan benar! Terima kasih!
dari pertanyaan yang saya tanyakan hari ini (dengan kredit ke jawaban pengguna @ aecolley ):
bind '"\C-m": "\C-l\C-j"'
The \C-msimulasi 'Enter', yang \C-lsimulasi Ctrl+lseperti itu jelas dan \C-jadalah "baris baru-dan-indent", sehingga perintah mengikat Enter untuk Ctrl + l & Ctrl + j
yang bekerja pada GNU bash, versi 3.2.53 (1) -release (x86_64-apple-darwin14) dan jawaban lain di utas ini tidak. juga, ini tidak mencemari sejarah dengan perintah 'jelas' setiap perintah lainnya.
cb4() {
preexec () {
clear
}
}
Ini menggunakan pengait yang disebut preexec, karya terkonfirmasi dengan zsh juga
Kemudian setiap sesi yang Anda ingin hapus secara otomatis sebelum setiap perintah yang Anda jalankan: cb4
preexec () {
clear
}
ganti kata cleardengantput reset
tput opsional tetapi mempercepat proses reset