ฉันต้องการกำหนดค่า bash เพื่อประมวลผลclear
คำสั่งทุกครั้งที่ฉันพิมพ์คำสั่งบางคำสั่งในเทอร์มินัล (ก่อนดำเนินการคำสั่งของฉัน) ฉันจะทำสิ่งนั้นได้อย่างไร
ฉันใช้ Debian Linux
ฉันต้องการกำหนดค่า bash เพื่อประมวลผลclear
คำสั่งทุกครั้งที่ฉันพิมพ์คำสั่งบางคำสั่งในเทอร์มินัล (ก่อนดำเนินการคำสั่งของฉัน) ฉันจะทำสิ่งนั้นได้อย่างไร
ฉันใช้ Debian Linux
คำตอบ:
ทุบตีมีตะขอ precommand เรียงจาก
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
ก่อนที่จะดำเนินการคำสั่ง มันได้ผลเช่นนี้สำหรับฉัน เบ็ด preexec จะถูกดำเนินการสำหรับแต่ละคำสั่งแบบโต้ตอบมันไม่สำคัญว่าคำสั่งนั้นเป็นคำสั่งในตัวหรือคำสั่งภายนอกหรือหลายคำสั่ง
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
ปัญหาคือ PROMPT_COMMAND กำลังทำงานอยู่และติดกับดักหลังจากคำสั่งจริง บางคนบอกได้ไหมว่าทำไมมา local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
ที่นี่
history -1
พิมพ์บรรทัดคำสั่งสุดท้ายโดยมีหมายเลขประวัติด้านหน้า ตัวกรอง sed ตัดหมายเลขประวัติออก
bind 'RETURN: "\e[1~clear; \e[4~\n"'
หลังจากนั้นทุกครั้งที่คุณกดreturnแทนที่จะเขียนเพียงแค่\n
มันจะย้ายไปที่จุดเริ่มต้นของบรรทัดป้อนข้อความclear;
จากนั้นย้ายไปยังจุดสิ้นสุดและป้อน\n
ตามที่คาดไว้
clear
คำสั่งด้วยคำสั่ง
clear
จะถูกดำเนินการก่อนที่คำสั่งและเอาท์พุทคำสั่งจะไม่หายไป อย่างไรก็ตามในกรณีที่มีข้อความแจ้ง
clear;
\n
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
มันจะย้ายไปที่จุดเริ่มต้นพิมพ์ls;#
ความเห็นสิ่งที่อยู่ที่นั่นและเรียกใช้ls
คำสั่งอย่างถูกต้อง! ขอบคุณ!
จากคำถามที่ฉันถามในวันนี้ (โดยให้เครดิตกับคำตอบของผู้ใช้@ aecolley ):
bind '"\C-m": "\C-l\C-j"'
การ\C-m
จำลองคีย์ 'Enter' เป็นการ\C-l
จำลองCtrl+l
ตามที่เห็นได้ชัดและปุ่ม\C-j
คือ "newline-and-indent" ดังนั้นคำสั่งจะรวมคีย์ Enter เข้ากับ Ctrl + l & Ctrl + j
ที่ใช้งานได้กับ GNU bash, รุ่น 3.2.53 (1) -release (x86_64-apple-darwin14) และคำตอบอื่น ๆ ในหัวข้อนี้ไม่ได้ นอกจากนี้ยังไม่ก่อให้เกิดมลพิษกับคำสั่ง 'ชัดเจน' ทุกคำสั่งอื่น ๆ
cb4() {
preexec () {
clear
}
}
ใช้เบ็ดที่เรียกว่าpreexec
ยืนยันทำงานกับ zsh เกินไป
จากนั้นเซสชันใด ๆ ที่คุณต้องการลบโดยอัตโนมัติก่อนทุกคำสั่งที่คุณเรียกใช้: cb4
preexec () {
clear
}
แทนที่คำclear
ด้วยtput reset
tput
เป็นทางเลือก แต่เร่งความเร็วกระบวนการรีเซ็ต