Saya ingin mengkonfigurasi bash untuk menjalankan clear
perintah 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 clear
perintah 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 -1
mencetak 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 \n
itu akan pindah ke awal baris, masukkan teks clear;
, lalu pindah ke akhir dan masukkan \n
seperti yang diharapkan.
clear
perintah dengan perintah.
clear
dieksekusi 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 ls
perintah 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-m
simulasi 'Enter', yang \C-l
simulasi Ctrl+l
seperti itu jelas dan \C-j
adalah "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 clear
dengantput reset
tput
opsional tetapi mempercepat proses reset