ฉันจะล้างประวัติเทอร์มินอล Gnome ได้อย่างไร


59

เมื่อเราใช้clearคำสั่งหรือCtrl+ Lในเทอร์มินัลมันจะทำการล้างเทอร์มินัล แต่เรายังสามารถเลื่อนกลับเพื่อดูคำสั่งที่ใช้ล่าสุด มีวิธีล้างเทอร์มินัลอย่างสมบูรณ์หรือไม่?


มันขึ้นอยู่กับเทอร์มินัลและไม่มีคำตอบใดที่อยู่
Thomas Dickey

คำตอบ:


69

tput resetคุณสามารถใช้

นอกจากนี้resetและtput resetคุณสามารถใช้เชลล์สคริปต์ต่อไปนี้

#!/bin/sh
echo -e \\033c

สิ่งนี้จะส่งอักขระควบคุมEsc-Cไปยังคอนโซลซึ่งรีเซ็ตเทอร์มินัล

คำหลักของ Google: ลำดับการควบคุมคอนโซลของ Linux

man console_codes พูดว่า:

ลำดับ ESC c ทำให้การรีเซ็ตเทอร์มินัลซึ่งเป็นสิ่งที่คุณต้องการหากหน้าจออ่านไม่ออก "echo ^ V ^ O" ที่แนะนำมักจะทำให้ปัจจุบันเป็น G0 เท่านั้น แต่ไม่มีการรับประกันว่าคะแนน G0 ที่โต๊ะ a) ในบางดิสทริบิวชันจะมีการรีเซ็ตโปรแกรม (1) ซึ่งทำหน้าที่ "echo ^ [c" หากรายการ terminfo ของคุณสำหรับคอนโซลถูกต้อง (และมีรายการ rs1 = \ Ec) ดังนั้น "tput reset" ก็จะทำงานเช่นกัน


1
ความแตกต่างระหว่างการรีเซ็ตและการรีเซ็ต tput คืออะไร
Toothrot

tput resetเร็วกว่าresetใน Ubuntu 16.04 อย่างน้อย
IvánRodríguez Torres

5
-1 คุณยังคงเห็นบัฟเฟอร์ได้ถ้าคุณเลื่อนขึ้น
João Pimentel Ferreira


15

ฉันรู้ว่าคุณอยู่ใน terminal gnome แต่ฉันคิดว่าฉันจะตอบด้วยเคล็ดลับสำหรับคนอื่น ๆ ที่อาจจะ (เช่นฉัน) บน Mac:

หากคุณกำลังใช้Terminal.appหรือiTerm.appแล้วControl+Lจะเลื่อนขึ้นเพื่อให้ขั้วดูเหมือนว่างเปล่า แต่Cmd+Kจริงจะตั้งสถานี / ชัดเจนเลื่อนกลับ

หรือหากคุณสามารถตั้งค่าแป้นพิมพ์สำหรับเครื่องเทอร์มินัลของคุณคุณอาจสามารถกำหนดสิ่งที่ต้องการCtrl+Kป้อนข้อมูลecho -e \\033cตามที่กล่าวไว้ข้างต้น


2
Cmd+Kคือทั้งหมดที่ฉันต้องการ ty
Gaurav Gandhi

9

คำตอบของ Anthon นั้นใช้งานได้ใน KDE Konsole แต่ไม่ใช่ urxvt ใน urxvt ฉันใช้การรีเซ็ตเป็นเวลาสองสามปีเพื่อล้าง scrollback (รวมถึงสิ่งอื่น ๆ ทั้งหมดที่ทำ) และไม่พอใจว่ามันไม่ทำงานใน Konsole ดังนั้นสำหรับ Linux ฉันมีนามแฝงใหม่:

alias allclear='clear; echo -e "\033c\e[3J"'

แต่มันไม่ทำงานบน OS X

tput reset ไม่ทำงานในบริบท AFAICT ใด ๆ

ใน KDE Konsole ctrl- shift- kลบการเลื่อนกลับ (รวมถึงพรอมต์เชลล์ปัจจุบันดังนั้นจึงว่างเปล่า) ใน iTerm หรือเทอร์มินัลของ Apple ใน OS X cmd- shift- kยังล้าง scrollback หากต้องการเพิ่มคุณสมบัตินี้ไปยัง urxvt ให้เพิ่มคุณลักษณะนี้ลงใน ~ / .Xresources:

urxvt*keysym.C-S-K: command:\033c

คำตอบนี้เป็นคำตอบที่ทุกคนที่ใช้ Linux Bash จะรักถ้าพวกเขาคาดหวังผลลัพธ์เดียวกันกับที่พวกเขาจะได้รับบน Mac โดยกดคำสั่ง + K. ฉันไปข้างหน้าและเปลี่ยนเป็นคำสั่งแบบสแตนด์อโลนโดยการเพิ่มฟังก์ชั่นต่อไปนี้ ของ /etc/bash.bashrc (จากนั้นออกจากระบบเซิร์ฟเวอร์กลับเข้าสู่ระบบและมันจะทำงานผ่านคำสั่ง allclear): allclear(){`echo 'การล้างเทอร์มินัลและ scrollback ... " `` sleep 1.5`' clear; echo -e "\ 033c \ e [3J" ` }` แก้ไข: ไม่สามารถฟอร์แมตเพื่อให้ทำงานได้ หากใครสามารถแก้ไขได้เพื่อให้สามารถอ่านได้ฉันจะขอบคุณมัน
KLaw

3

ฉันพบสิ่งนี้เมื่อหลายปีก่อนและทำงานได้ดีสำหรับฉัน มันล้างเทอร์มินัลอย่างสมบูรณ์โดยไม่มีประวัติการเลื่อน

echo -e "\e[3J"

2

ฉันแมปF12เพื่อล้างหน้าจอในแต่ละเปลือกหอยดังต่อไปนี้: ทุบตี , cshและเปลือกปลา คำสั่งของฉันแตกต่างจากคำสั่งก่อนหน้านี้ทั้งหมดเพราะมันจะรักษาสิ่งที่คุณได้พิมพ์ลงไปในบรรทัดปัจจุบัน
(หมายเหตุ: การกำหนดค่าทั้งหมดด้านล่างนี้ขึ้นอยู่กับเทอร์มินัล แต่ฉันหวังว่าพวกเขาจะทำงานได้ทุกที่)

ทุบตี

เปิดไฟล์~/.inputrcและแทรกบรรทัดต่อไปนี้:

"\e[24~": "\C-k \C-uecho -ne '\\ec\\e[3J'; history -d $((HISTCMD-1))\n\C-y\C-?"

หากต้องการให้มีการเชื่อมโยงคีย์ใหม่ให้เปิดเทอร์มินัลใหม่หรือพิมพ์Ctrl+ Xจากนั้นCtrl+ Rเพื่อโหลดไฟล์. inputrc ในเทอร์มินัลปัจจุบัน

คำอธิบาย
ไฟล์ ~ / .inputrc ควบคุมการเชื่อมโยงคีย์ของเทอร์มินัล bash

เกี่ยวกับสาย:

  1. ส่วนแรกของเส้นแผนที่ที่สำคัญ"\e[24~"F12
  2. C-k( Ctrl+ X) ล้างฆ่าแหวน (หน่วยความจำทุบตีของการคัดลอกและที่ผ่านมา)
  3. พื้นที่หลีกเลี่ยงเสียงบี๊บในคำสั่งถัดไป
  4. เครื่องหมายC-u( Ctrl+ U) ส่งบรรทัดปัจจุบันไปยัง kill-ring และลบออก
  5. echo -ne '\\ec\\e[3J'; history -d $((HISTCMD-1))\nส่งคำสั่งที่สองจัดกลุ่มไปยังสถานี พวกเขาจะถูกคั่นด้วยและยกเลิกโดย ;\n
    • การecho -ne '\\ec\\e[3J'ล้างหน้าจอ
    • history -d $((HISTCMD-1))หลีกเลี่ยงสองคำสั่งเหล่านี้เข้ามาในประวัติศาสตร์
  6. C-y( Ctrl+ Y) วางฆ่าแหวนที่เก็บไว้โดยC-uคำสั่ง
  7. C-?( Ctrl+ ?) เทียบเท่ากับBackspaceและลบพื้นที่ที่แทรกอยู่ในขั้นตอนที่ 3

อ้างอิง:

csh

พิมพ์คำสั่งร้อง
bindkey -c "^[[24~" "echo -ne '\ec\e[3J'"
นอกจากนี้ยังสามารถแทรกใน.cshrcไฟล์ของคุณเพื่อโหลดการเชื่อมโยงคีย์กับเทอร์มินัลใหม่ทุกเครื่อง
(ใช่มันง่ายกว่าทุบตีมาก)

เปลือกหอย

พิมพ์คำสั่งร้อง
bind -k f12 "echo -ne '\ec\e[3J'; commandline -f repaint"
คุณสามารถแก้ไขและบันทึกฟังก์ชันfish_user_key_bindingsเพื่อโหลดการเชื่อมโยงคีย์ไปยังเทอร์มินัลใหม่ทุกแห่ง
(ใช่มันง่ายกว่าทุบตีมาก)


2

[Ubuntu 16.04]

.bash_history ไฟล์จะถูกสร้างขึ้นในไดเรกทอรีบ้านของผู้ใช้เมื่อสถานีถูกปิด

มันมีประโยชน์ แต่คุณสามารถลบได้ถ้าต้องการ .. อย่างไรก็ตามมันจะถูกสร้างขึ้นทุกครั้งที่คุณใช้เทอร์มินัล

คุณสามารถลบได้ด้วยตนเองจาก:

  • ไฟล์เบราว์เซอร์ของคุณ

  • เทอร์มินัล: โปรดจำไว้ว่าไฟล์. bash_history ใหม่จะถูกสร้างขึ้นเมื่อคุณปิดเทอร์มินัล (ตามการกำหนดค่าเริ่มต้น)

หรือคุณสามารถเรียกใช้ฟังก์ชั่นที่กำหนดเองได้หากคุณบันทึกการใช้งานที่คุณต้องการลงในไฟล์ที่เชื่อมโยงจาก bashrc .. คุณสามารถแก้ไข bashrc ได้เองหากคุณต้องการวางรหัสไว้ที่นั่น แต่ตัวอย่างถัดไปอยู่ในไฟล์แยกต่างหาก

สุจริตนี้ไม่มีประโยชน์สำหรับฉัน แต่ถ้าคุณต้องการที่จะลบประวัติคำสั่งก่อนออกคุณสามารถทำได้:

.bash_custom # นี่คือไฟล์ที่กำหนดเองของฉัน

blotout() {
    HISTSIZE=0
    rm $HOME/.bash_history
    exit
}

จากนั้นที่ด้านล่างของเพิ่มชื่อและเส้นทางของไฟล์ของฉัน.
bashrc # นี่คือไฟล์กำหนดค่าสำหรับ bash (ฉันคิดว่า)

# existent code
#...
#..

# import user customizations
source $HOME/.bash_custom

และนั่นคือทั้งหมด

แต่เพื่อทำสิ่งที่คุณต้องการเพียงแค่คุณต้องการฟังก์ชั่นนี้ในไฟล์ที่คุณกำหนดเองและเชื่อมโยงมัน:

refresh() {
        tput reset
        H=HISTSIZE
        HISTSIZE=0
        HISTSIZE=H
}

หรือเพียงแค่ใส่ฟังก์ชั่นใน. bashrc หากคุณต้องการ แต่วิธีที่คุณอาจต้องการคำสั่งส่งออกหลังจากฟังก์ชั่นฉันไม่แน่ใจและหากไฟล์นั้นได้รับการอัพเดตอาจทำให้ฟังก์ชั่นของคุณหายไป .. ฉันก็ไม่แน่ใจเช่นกัน: ง.
จำไว้ว่าคุณต้องเริ่มต้นเทอร์มินัลใหม่เมื่อแก้ไขไฟล์. bashrc หรือไฟล์ 'กำหนดเอง' ของคุณ


1

สำหรับฉันการใช้ PuTTY เทียบกับ CentOS 7 จะปล่อยเฉพาะคำสั่ง clear ใน scrollback แต่รัน "clear && clear" ซึ่งเป็นคำสั่ง clear สองกรณีในเวลาเดียวกันเคลียร์ scrollback และทำให้ฉันไม่มี scrollbar ลองดู มันเป็นทางออกที่แปลก แต่ไม่มีสิ่งใดในที่นี้ที่ลบล้าง scrollback อย่างมีประสิทธิภาพและสิ่งนี้ทำได้


0

เพิ่มไป~/.inputrcยังผูกการล้างที่สมบูรณ์ไปที่F12:

"\e[24~":'!echo -ne \047\\0033\\0143\047\r'

0

ใน Fedora 30 การลบประวัติทำได้โดยการลบไฟล์ $ HOME / .bash_history วิธีที่ง่ายที่สุดในการล้างไฟล์ประวัติเทอร์มินัลผ่านแป้นพิมพ์คือ:

  • กดAlt+ F4เพื่อปิดหน้าต่างเทอร์มินัล GNOME แต่ละหน้าต่าง, หมุนไปตามหน้าต่างผ่านAlt+ TabหรือAlt+ Shift+ Tabตามต้องการ (ต้องปิดหน้าต่างเทอร์มินัลทั้งหมดเนื่องจากไฟล์. bash_history ถูกสร้างหรืออัปเดตเมื่อปิด)
  • กด+AltF2
  • พิมพ์nautilusและกดEnterปุ่มเพื่อเปิดแอปพลิเคชันไฟล์ (GNOME) (ซึ่งก่อนหน้านี้รู้จักกันในชื่อ Nautilus)
  • กดCtrl+ Hหากจำเป็นเพื่อแสดงไฟล์ที่ซ่อน
  • Type .bash_history(ซึ่งควรปรากฏในแถบค้นหาหากพิมพ์ทันทีหลังจากเปิดหน้าต่างไม่เช่นนั้นแถบค้นหาจะสามารถเข้าถึงได้ผ่านCtrl+ L)
  • กดปุ่มลูกศรลงเพื่อเลือกไฟล์ซึ่งควรเป็นผลการค้นหาเดียว
  • กดShift+ Deleteเพื่อลบไฟล์อย่างถาวร (หากคุณใช้รหัสที่ไม่ได้แก้ไขDeleteแทนไฟล์. bash_history จะยังคงสามารถเข้าถึงได้ผ่านโฟลเดอร์ถังขยะ)

-2
cat /dev/null > ~/.bash_history && history -c && exit

อย่างน้อยที่สุดที่คุณสามารถทำได้คือการอธิบายและจัดรูปแบบคำตอบของคุณ
Paradox

(1) ไม่ชัดเจนว่า OP ต้องการลบหน่วยความจำของเชลล์ (ประวัติ) ของคำสั่งก่อนหน้า (คำถามคือเกี่ยวกับเทอร์มินัล ) คุณไม่สามารถเห็นได้ แต่history -cได้รับการนำเสนอในสองคำตอบก่อนหน้านี้และพวกเขาถูกลบเพราะไม่ได้คำตอบที่ถูกต้องสำหรับคำถาม (2) ในขณะที่ปิดหน้าต่างเทอร์มินัลจะ (อาจ) ลบหน่วยความจำของเทอร์มินัลของคำสั่งก่อนหน้ามันไกลจากที่ชัดเจนว่า OP ต้องการทำเช่นนั้น …และ PS exitคำสั่งเดียวไม่รับประกันว่าจะปิดหน้าต่างเทอร์มินัล
G-Man
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.