ชุดรูปแบบเทอร์มินัลของฉันเคยเป็นเช่นนี้
แต่ฉันคิดว่าพรอมต์เสียพื้นที่มากมาย และต่อมาฉันก็มีความคิดว่าฉันสามารถทำความสะอาดพรอมต์ทุกครั้งที่ฉันมีคำสั่ง ฉันใช้ทุบตีวิธีหนึ่งคือใช้preexec_invoke_exec
ฟังก์ชั่น
ฉันใช้คำสั่งต่อไปนี้เพื่อทำความสะอาดตัวอักษรพรอมต์ล่าสุด:
echo -ne "\033[1A\033[K\033[1A\033[K\033[31;1m$ \033[0m"
เพื่อให้เครื่องนั้นสะอาดมากเช่นนี้
แต่ตอนนี้ปัญหาของฉันจะมีปัญหาถ้าผมต้องการที่จะใช้คำสั่งหลายในหนึ่งบรรทัดfor i in ...
กล่าวว่าเมื่อผมใช้
นี่คือเวอร์ชั่นเต็มของฟังก์ชั่นใน. bashrc ของฉัน
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
ใช้ฟังก์ชั่นของเขาเอาต์พุตของคำสั่งวนซ้ำจะถูก "กลืน" เพื่อพูด ดังนั้น OP จึงต้องการที่จะทำให้พฤติกรรมนั้นสะอาดในขณะที่เปิดใช้งานพรอมต์นั้น เหตุผลที่ฉันสนับสนุนสิ่งนี้คือความสนใจในการรับรู้ในเชลล์การใช้งานข้อเสนอแนะและการพกพา ลิงก์ที่ฉันใส่ไว้ในความคิดเห็นก่อนหน้าของฉันนำไปสู่การโพสต์ใน superuser - พวกเขาประสบปัญหาในการระบุตัวอย่างนี้ดังนั้นมันจึงเป็นต้นแบบที่เลียนแบบฟังก์ชัน zsh ดั้งเดิม (ซึ่งฉันคิดว่าน่าสนใจ) ในรูปแบบของฟังก์ชันดัก ที่นี่