Chủ đề thiết bị đầu cuối của tôi đã từng như thế này,
Nhưng tôi nghĩ rằng nhắc nhở lãng phí rất nhiều không gian. Và sau đó tôi có một ý tưởng rằng tôi có thể xóa dấu nhắc mỗi khi tôi chạy lệnh. Tôi đã sử dụng bash, một trong những giải pháp là sử dụng preexec_invoke_exec
chức năng.
Tôi sử dụng lệnh sau để xóa các ký tự nhắc nhở cuối cùng:
echo -ne "\033[1A\033[K\033[1A\033[K\033[31;1m$ \033[0m"
Vì vậy, thiết bị đầu cuối rất sạch sẽ, như thế này,
Nhưng bây giờ vấn đề của tôi là, sẽ có vấn đề nếu tôi muốn sử dụng nhiều lệnh trong một dòng , giả sử, khi tôi sử dụng for i in ...
.
Đây là phiên bản đầy đủ của hàm trong .bashrc của tôi,
preexec () { echo -ne "\033[1A\033[K\033[1A\033[K\033[31;1m$ \033[0m"; echo -n "$1"; echo -ne " \033[37;2m["; echo -n "$2"; echo -ne "]\033[0m\n"; }
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"`;
local this_pwd=`pwd`;
preexec "$this_command" "$this_pwd"
}
trap 'preexec_invoke_exec' DEBUG
zsh
...
for i in $(seq 1 10); do ls; done
với chức năng của anh ta, đầu ra của các lệnh lặp sẽ bị "nuốt" để nói. Vì vậy, OP muốn vệ sinh hành vi trong khi kích hoạt dấu nhắc đó. Lý do tại sao tôi ủng hộ điều này là sự quan tâm đến nhận thức về vỏ, tính khả dụng, phản hồi và tính di động. Liên kết mà tôi đã đưa ra trong nhận xét trước đây của mình dẫn đến bài đăng trên superuser - họ đã gặp rắc rối khi gán đoạn mã này, vì vậy đây là một nguyên mẫu mô phỏng chức năng zsh gốc (mà tôi nghĩ là thú vị), dưới dạng chức năng bẫy đây.