Tôi muốn cấu hình bash để thực thi clear
lệnh mỗi khi tôi gõ một số lệnh trong terminal (trước khi thực hiện lệnh của mình). Làm thế nào tôi có thể làm điều đó?
Tôi đang sử dụng Debian Linux.
Tôi muốn cấu hình bash để thực thi clear
lệnh mỗi khi tôi gõ một số lệnh trong terminal (trước khi thực hiện lệnh của mình). Làm thế nào tôi có thể làm điều đó?
Tôi đang sử dụng Debian Linux.
Câu trả lời:
Bash có một hook preommand . Sắp xếp
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
, trước khi thực hiện lệnh. Nó hoạt động như thế này đối với tôi. Móc preexec được thực thi cho mỗi lệnh tương tác, không quan trọng là lệnh đó là lệnh tích hợp hay lệnh bên ngoài hoặc nhiều lệnh.
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
vấn đề là PROMPT_COMMAND đang được chạy và cũng bị mắc kẹt sau lệnh thực tế; Ngoài ra ai đó có thể cho tôi biết tại sao local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
là ở đây?
history -1
in dòng lệnh cuối cùng, với số lịch sử ở phía trước. Bộ lọc sed thoát khỏi số lịch sử.
bind 'RETURN: "\e[1~clear; \e[4~\n"'
Sau đó, mỗi lần bạn nhấn returnthay vì chỉ viết, \n
nó sẽ di chuyển đến đầu dòng, nhập văn bản clear;
, sau đó di chuyển đến cuối và nhập \n
như mong đợi.
clear
lệnh bằng các lệnh.
clear
được thực thi trước khi lệnh và đầu ra lệnh không biến mất. Tuy nhiên trong trường hợp với dấu nhắc nó không.
clear;
vào đầu ra cho mỗi phần phụ \n
.
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
nó sẽ chuyển đến đầu, gõ ls;#
nhận xét những gì đã có và chạy ls
lệnh đúng! cám ơn!
từ một câu hỏi tôi đã hỏi ngày hôm nay (với tín dụng cho câu trả lời của người dùng @ aeccar ):
bind '"\C-m": "\C-l\C-j"'
Các \C-m
mô phỏng 'Enter', các \C-l
mô phỏng Ctrl+l
vì nó rõ ràng và \C-j
là "newline-và-indent", do đó lệnh được ràng buộc phím Enter để Ctrl + l & Ctrl + j
hoạt động trên GNU bash, phiên bản 3.2.53 (1) -release (x86_64-apple-darwin14) và các câu trả lời khác về chủ đề này thì không. Ngoài ra, điều này không gây ô nhiễm lịch sử với các lệnh 'xóa' mọi lệnh khác.