bash ตำแหน่งไฟล์ประวัติเอาต์พุตเชลล์


13

เปลือก bash เก็บเซสชันเทอร์มินัลจริงไว้ที่ไหน ฉันต้องการอ่านเอาต์พุตของคำสั่งที่ฉันใช้ก่อนหน้านี้ ทั้งหมดที่ฉันสามารถหา googling คือวิธีการเก็บผลลัพธ์ของคำสั่ง

เนื่องจากเอาต์พุตจะแสดงบนหน้าจอจึงต้องเก็บไว้ที่ใดที่หนึ่ง ดังนั้นคำถามของฉันคือ: ที่ไหน

คำตอบ:


11

Bash เก็บประวัติคำสั่งที่คุณเรียกใช้เท่านั้น (ซึ่งคุณสามารถดึงข้อมูลได้ด้วยการพิมพ์history) หากคุณไม่ได้ตั้งค่าการเลื่อนกลับไปเป็นจำนวนที่สูงมากไม่มีวิธีการดูผลลัพธ์ที่เก่ากว่าค่าที่ตั้งไว้ของการเลื่อนกลับ นอกจากนี้ยังมีการตั้งค่านี้เป็นจำนวนที่สูงมากจะทำให้เลื่อนซบเซาของคุณตั้งแต่สายจะถูกเก็บไว้ในหน่วยความจำ

ในการจัดเก็บคำสั่งในอนาคตและผลลัพธ์ของพวกเขามีตัวเลือกน้อย:

การใช้ screen

เริ่มต้นหน้าจอscreenเซสชั่นโดยการป้อน เมื่อคุณอยู่ในหน้าจอให้กดCtrl- aแล้วแล้วใส่: logI / O ทั้งหมดจะถูกบันทึกในscreenlogไฟล์ในไดเรกทอรีที่คุณเริ่มscreenคำสั่ง

การใช้ script

scriptคุณสามารถเริ่มต้นด้วยการพิมพ์ สคริปต์เซสชั่นจะเริ่มต้นที่จะจับภาพทุก I / O typescriptไฟล์ชื่อ คุณสามารถออกจากscriptเซสชันโดยCtrl- d และดูบันทึกในtypescriptไฟล์

การใช้ tee

ทีเป็นเครื่องมือที่มีประโยชน์ คุณสามารถทำสิ่งนี้:

$ bash | tee log.txt

สิ่งนี้จะเปิด bash shell ใหม่ภายในอันที่คุณทำงานอยู่ เมื่อคุณexitออกจากสิ่งนี้คุณจะเห็นผลลัพธ์ในไฟล์ที่เรียกว่าlog.txt

ทางอื่น

ตามที่ดัสตินเคิร์กแลนด์แนะนำในโพสต์นี้คุณสามารถใช้byobuได้เช่นกัน แม้ว่าฉันไม่เคยใช้เครื่องมือ screencasting terminal เช่นShelrยังเสียงเหมือนตัวเลือก


6

มีคำถามมากมายที่เกี่ยวข้องกับคำถามนี้ แต่คำถามทั้งหมดเริ่มต้นด้วยสมมติฐาน (ขวา) ว่าเอาต์พุตไม่ได้ถูกบันทึก

ดังนั้นคำถามของฉันคือ: ที่ไหน

ไม่มีที่ไหนเลย: เอาต์พุตของ Bash (และเชลล์อื่น ๆ ที่ฉันรู้จัก) ไม่ถูกบันทึก

เนื่องจากเอาต์พุตจะแสดงบนหน้าจอจึงต้องเก็บไว้ที่ใดที่หนึ่ง

มันเป็นไปได้ แต่ส่วนใหญ่ไม่ได้อยู่ในข้อความธรรมดาและไม่ได้อยู่บนดิสก์ (แม้ว่านี่จะขึ้นอยู่กับเทอร์มินัลอีมูเลเตอร์): เป็นไปได้มากที่สุดและอย่างน้อยในกรณีส่วนใหญ่ในส่วนหน่วยความจำที่จัดสรรโดยเทอร์มินัลอีมูเลเตอร์

อย่างไรก็ตามแน่นอนว่ามันไม่ได้ถูกบันทึกไว้ในไฟล์อย่างน้อยก็ไม่ใช่เชลล์และฉันไม่รู้เทอร์มินัลอีมูเลเตอร์ที่บันทึกเอาท์พุทเป็นไฟล์ตามค่าเริ่มต้น

อันที่จริงนี่ไม่ได้หมายความว่ามันเป็นไปไม่ได้ที่จะบันทึกผลลัพธ์ของเทอร์มินัล: ก่อนอื่นฉันจะพูดถึงบางสิ่งที่ฉันคิดว่าไม่ค่อยมีใครรู้เพราะฉันไม่เคยเห็นใครพูดถึงเรื่องนี้อย่างน้อยที่นี่บน Ask Ubuntu: Konsole scrollback ไปยังไฟล์ (อาจมีเทอร์มินัลอีมูเลเตอร์อื่น ๆ ที่มีฟังก์ชั่นดังกล่าว Konsole เป็นเพียงหนึ่งเดียวที่ฉันรู้จัก) ถึงแม้ว่านี่จะถูก จำกัด โดยขนาดการเลื่อนของ Konsole

ซึ่งมักจะไม่ค่อยมีประโยชน์จริง ๆ และส่วนใหญ่คุณจะต้องมองหาโซลูชัน "เหมาะสม" เพื่อบันทึกผลลัพธ์ทั้งหมดของเซสชันไปยังไฟล์ ( ฉันจะบันทึกอินพุตและเอาต์พุตทั้งหมดในเซสชันเทอร์มินัลได้อย่างไรและคำตอบของรอน )


1

มีคำสั่งชื่อเป็นสคริปต์หากไม่ได้ติดตั้งไว้ก็apt-get install scriptจะทำมัน

จากนั้นใน terminal เพียงแค่พิมพ์สคริปต์

และทำสิ่งที่คุณต้องการหลังจากที่คุณทำเพียงพิมพ์ exit จากนั้นจะมีไฟล์ที่สร้างขึ้นในไดเรกทอรีปัจจุบันของคุณพร้อมข้อมูล stdout และ stdin ทั้งหมด

หวังว่ามันจะช่วยคุณ


แพ็คเกจ NA ใน Ubuntu 18.04
markroxor

1

สิ่งนี้ไม่เกี่ยวข้องกับเชลล์ของคุณ ( bash) มันเป็นคุณสมบัติของเทอร์มินัลอีมูเลเตอร์ที่คุณใช้ มันถูกเก็บไว้ใน "scrollback buffer" ของเทอร์มินัล ฉันยังไม่ได้สามารถที่จะหาคำอธิบายที่ชัดเจนใด ๆ ที่ว่านี้จะถูกเก็บไว้ แต่ประสบการณ์ส่วนตัว/tmpได้แสดงให้ฉันว่ามันจะถูกเก็บไว้ที่ไหนสักแห่งใน

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

gedit newfile

เขียนบรรทัดข้อความลงในไฟล์และบันทึก ตอนนี้ในขณะที่ไฟล์นั้นยังคงเปิดอยู่ให้เปิดเทอร์มินัลแล้วลบมัน:

rm newfile

เนื่องจากคุณยังคงเปิดไฟล์อยู่geditคุณจึงสามารถเขียนต่อไปได้ คุณสามารถเขียนข้อมูลลงหลายกิกะไบต์ได้แม้ว่าจะมีการลบไฟล์ นั่นเป็นเพราะลบไฟล์เพียงแค่เอาลิงค์ที่ชี้ไปที่ของinode หากตัวให้คำอธิบายไฟล์นั้นถูกเปิดไว้โดยโปรแกรมอื่นข้อมูลสามารถถูกเขียนลงไปได้โดยไม่จำเป็นต้องมีลิงค์ (ไฟล์) จริงที่ตรงกับตัวบอกไฟล์บนระบบไฟล์อีกต่อไป

ทั้งหมดนี้คือการบอกว่าประวัติเทอร์มินัลของคุณอาจได้รับการบันทึกโดยใช้กลอุบายเช่นนั้นบางแห่งในไฟล์ที่ถูกลบ/tmpมา สิ่งที่คุณอาจต้องการคือเพิ่มขนาดบัฟเฟอร์การเลื่อนของเทอร์มินัลอีมูเลเตอร์เพื่อให้คุณสามารถเลื่อนขึ้นและดูได้ รายละเอียดของวิธีการทำเช่นนี้ขึ้นอยู่กับการจำลอง terminal ที่คุณใช้ ส่วนใหญ่มีสวิตช์บรรทัดคำสั่งที่ให้คุณและนี่ก็มีอีกหลายวิธีที่มีวิธีตั้งค่า GUI ตัวอย่างเช่นในgnome-terminal(ค่าเริ่มต้นบน Ubuntu) คือแก้ไข -> การตั้งค่า -> โปรไฟล์ --- คลิกที่โปรไฟล์ของคุณ -> แก้ไข -> การเลื่อน -> จำกัด การเลื่อนกลับไปที่ NNN:

หน้าจอตัวเลือก gnome-terminal


ข้อมูลเชิงลึกที่น่าสนใจ การตรวจสอบประวัติที่ยาวนานขึ้นในเครื่องเทอร์มินัลไม่ใช่สิ่งที่ฉันต้องการ: ฉันต้องการเข้าถึง cout ไปยังเครื่องเทอร์มินัลนั่นคือทั้งหมดที่เขียนไว้ที่นั่นจาก EG PYTHON
Daniel Böckenhoff

@ DanielBöckenhoffคุณอาจต้องการscriptคำอธิบายที่ยอมรับได้
terdon

แน่ใจ ฉันยอมรับแล้ว :)
Daniel Böckenhoff

-2

เทอร์มินัลเซสชันถูกเก็บไว้ใน.bash_historyไฟล์ ป้อนสิ่งนี้ในเทอร์มินัลของคุณecho $HISTFILEซึ่งจะให้เส้นทางของ.bash_historyไฟล์


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