ฉันสามารถค้นหาประวัติของฉันผ่านหน้าต่างหน้าจอหลาย ๆ


11

screenเซสชั่นปัจจุบันของฉันมี 12 หน้าต่างที่เปิดอยู่ มันกำลังทำงานเป็นเวลาหลายสัปดาห์ ... ฉันรู้ว่าฉันดำเนินการconvertคำสั่งImageMagick ในหนึ่งใน 12 หน้าต่างหน้าจอเหล่านี้บางครั้งเมื่อสัปดาห์ที่แล้ว ... มีวิธีใดที่ฉันสามารถค้นหาประวัติ Bash ของทั้ง 12 อินสแตนซ์ได้โดยง่ายhistory | grep convertในทั้ง 12 หน้าจอ?


1
ผมใช้ zsh และฉันมีsetopt share_historyใน/etc/zsh/zshrcดังนั้นปัญหานี้ไม่ควรเกิดขึ้นกับฉัน: P
phunehehe

คำตอบ:


18

คุณสามารถเรียกใช้history -a; history -cในทุกหน้าต่างเพื่อบันทึกประวัติ แล้วhistory -rทำการรีเฟรช

หากต้องการแก้ไขอย่างถาวรให้เพิ่มสิ่งนี้ใน.bashrc:

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

2
ขอบคุณมาก! ปัญหาเดียวคือถ้าคุณพิมพ์บางอย่างในเชลล์หนึ่งจากนั้นไปที่อีกอันแล้วพิมพ์ประวัติทันทีมันจะไม่ปรากฏในประวัติ นี่เป็นเพราะ PROMPT_COMMAND ยังไม่ได้ดำเนินการดังนั้นการรีเฟรชจึงไม่เกิดขึ้น คุณจะต้องกดปุ่มย้อนกลับในหน้าต่างที่สอง (หรือเรียกใช้คำสั่งอื่น) ก่อนจากนั้นจึงพิมพ์ประวัติ
Javid Jamae

1

ฟังดูยาก ต่อไปนี้เป็นวิธีการสองสามข้อที่อาจเหมาะกับคุณ

หากคุณติดตั้งเครื่องมือบัญชีกระบวนการ (บน Linux ให้มองหาแพ็คเกจที่เรียกว่าacct) และการอนุญาตให้ใช้คุณสามารถดูว่าคุณใช้เทอร์มินัลใดที่คุณรันเมื่อใดและที่เป็นไปได้convert:

lastcomm convert

หากสิ่งนี้ไม่พร้อมใช้งานหรือไม่สามารถสรุปได้คุณสามารถดำเนินการhistoryคำสั่งในแต่ละอินสแตนซ์ของ bash เพื่อค้นหาconvertคำสั่ง คำสั่งนี้จะค้นหาคำสั่งที่อยู่ในไฟล์ประวัติเมื่อเริ่มใช้งาน bash

: >/tmp/convert.history
for w in $(seq 0 11); do
  screen -p $w -X stuff \
    'history | sed 's/^.*convert/'$w'&/" >>/tmp/convert.history
'; done
  • $(seq 0 11)วนซ้ำตามจำนวนหน้าต่างหน้าจอของคุณ ตรวจสอบให้แน่ใจว่าได้ข้ามหน้าต่างที่ไม่ได้ทำงานทุบตีอยู่ในขณะนี้ แต่มีกระบวนการอื่นที่ตีความอินพุตแตกต่างกัน
  • screen -p $w stuff …ส่งสตริงต่อไปนี้เป็นอินพุตไปยังหน้าต่างที่ระบุ คุณต้องขึ้นบรรทัดใหม่ที่ท้ายสตริง
  • ไฟล์/tmp/convert.historyจะมีรายการของบรรทัดเช่น3 convert foo.jpgถ้าคุณวิ่งconvert foo.jpgในหน้าต่าง 3

1
น่าเสียดายที่สิ่งเหล่านี้ใช้ไม่ได้ :-( ฉันเพิ่งจบการทำงานhistory | grep convertในหน้าต่างทั้งหมดฉันผิดหวังฉันต้องการยอมรับคำตอบที่ยอดเยี่ยมอีกครั้งโดย Gilles!
Josh

1

tcsh ช่วยให้คุณสามารถแบ่งปันประวัติระหว่างเซสชันผ่านการใช้นามแฝงเป็นระยะ

ในไฟล์. cshrc (หรือ. tcshrc) ของคุณ:

set tperiod = 60 #(or any other number.  Time in minutes between refreshing)
alias periodic 'history -S; echo "Syncing history"'

สิ่งนี้จะดำเนินการคำสั่งประวัติโดยอัตโนมัติทุก ๆ 60 นาที สิ่งนี้จะบันทึกประวัติลงในไฟล์ประวัติทั่วไปในโฮมไดเร็กตอรี่ของคุณ หากต้องการอัปเดตประวัติบ่อยขึ้นให้ลดหมายเลข tperiod หรือเรียกใช้คำสั่ง "เป็นระยะ" เพื่อรีเฟรชด้วยตนเอง


0

Bash เขียนประวัติเมื่อมันออกเท่านั้นซึ่งทำให้ปัญหานี้ดีที่สุด ฉันได้ยินมาว่า zsh สามารถแบ่งปันประวัติระหว่างเซสชันที่ใช้งานอยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.