วิธีการทั้งสองแสดงผลบรรทัดคำสั่งบนคอนโซลและบันทึกผลลัพธ์ลงในไฟล์ข้อความ?


25

ฉันจะรันsudo apt-get installโดยทั้งสองเห็นกระบวนการติดตั้ง (ในกรณีของฉันยาว) และบันทึกผลลัพธ์ลงในไฟล์ข้อความได้อย่างไร


เป็นเพียงประมาณapt-getใช่มั้ย?
Braiam

@Braiam ฉันคิดว่าวิธีการแก้ปัญหาที่ฉันยอมรับสามารถนำไปใช้กับคำสั่งอื่น ๆ ทั้งหมดคุณคิดเช่นนั้น?

คำตอบ:


17

ใช้scriptคำสั่ง มันจะคัดลอกทุกอย่างที่ไปที่หน้าจอในไฟล์

script -c "sudo apt-get install things" script-file.script

scriptส่งเอาต์พุตคำสั่งไปยังไฟล์ แต่ไม่แสดงบนหน้าจอ
แอรอน

2
@ BryceAtNetwork23 คุณลองคำสั่งแล้วหรือยัง สคริปต์ไม่ส่งออกส่งไปยังหน้าจอ
exore

1
ฉันทำ. ฉันวิ่งscript -c "history" ~/hist.txtและเห็นผลลัพธ์ที่ระบุScript startedและScript doneแต่ฉันไม่เห็นผลลัพธ์จากคำสั่งจริงบนหน้าจอ
Aaron

10
@ BryceAtNetwork23 historyเป็นเชลล์ที่สร้างขึ้นไม่ใช่คำสั่งภายนอก สิ่งที่เกิดขึ้นคือ: 1) สคริปต์เริ่มทำงาน 2) สคริปต์ค้นหาคำสั่งประวัติไม่พบดังนั้นจึงเดาได้ว่าควรรันผ่านเชลล์ 3) สคริปต์รันคำสั่งhistory ผ่านเชลล์ 4) เชลล์ใหม่เริ่มทำงานและดำเนินการคำสั่งประวัติภายใน เนื่องจากนี่เป็นเชลล์ที่ไม่ใช่เชิงโต้ตอบใหม่ประวัติจึงไม่มีอะไรจะพูด
exore

1
scriptยังสามารถเรียกใช้แบบโต้ตอบ เพียงพิมพ์scriptที่พรอมต์คำสั่ง คุณจะได้รับเชลล์ใหม่และคำสั่งใด ๆ ที่คุณพิมพ์จะมีการบันทึกเอาต์พุต พิมพ์exitเพื่อจบเชลล์และบันทึกไฟล์ ตามค่าเริ่มต้นเอาต์พุตจะถูกเรียกtypescriptและมันจะมีทุกอย่างที่แสดงบนหน้าจอของคุณไม่ว่าคุณจะพิมพ์หรือมันเป็นเอาท์พุทของคำสั่ง historyคำสั่งควรจะยังคงมีอยู่ในเปลือกใหม่เช่นกัน
Brian Minton

52

คุณสามารถใช้teeคำสั่งเพื่อทำสิ่งนี้ให้สำเร็จ

sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt

ดูที่นี่สำหรับข้อมูลเพิ่มเติมหรือดำเนินการman tee

หมายเหตุ: ตามที่คนอื่น ๆ ได้กล่าวไว้2>&1จำเป็นต้องเปลี่ยนเส้นทาง STDERR ไปยัง STDOUT เพื่อตรวจจับข้อผิดพลาด ดูคำถาม StackOverflow นี้สำหรับคำอธิบายที่ดีเกี่ยวกับสิ่งที่2>&1ทำ


ฉันจะเพิ่ม "2> & 1" ก่อน "|"
Olivier Dulac

2
สิ่งนี้มีประโยชน์มากกว่าscriptการใช้คำสั่ง ดังนั้นข้อดีเช่นการทุบตีเสร็จจะง่ายกว่าสำเร็จ
Dan

2
@Dan: สคริปต์ไม่จำเป็นต้อง-c "something ...": ถ้าจะปล่อยคุณไปยังเชลล์และเสร็จสิ้นเมื่อคุณออกจากเชลล์นั้น อนุญาตให้ใช้คำสั่งหลายคำสั่ง ฯลฯ นอกจากนี้ยังมี "การจัดรูปแบบ" ข่าวสารเพิ่มเติมทำให้สามารถเล่นซ้ำสิ่งต่าง ๆ ได้ (เช่น: หน้าจอที่ชัดเจน ฯลฯ ) (แต่ยังสามารถทำให้เอาท์พุต ... ymmv)
Olivier Dulac

2
@Dan + ทำงานร่วมกับฟังก์ชั่น, นามแฝง, builtins และแม้กระทั่งกลุ่มคำสั่งและ subshells นี่ควรเป็นคำตอบที่ IMO ยอมรับ
Darkhogg

1
คุณสามารถใช้|&แทนการ2>&1 |ทุบตี
jfs

15

tee จะทำงานตามที่ต้องการ

ในการดักจับเอาต์พุตเป็นไฟล์ให้ใช้:

sudo apt-get install your_software | tee log_file.txt

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

sudo apt-get install your_software 2>&1  | tee log_file.txt

หรือเนื่องจากbash การสนับสนุน|&ผู้ประกอบการ , sudo apt-get install your_software |& tee log_file.txtท่อทั้งสองจะstdoutและstderrteeไป (ความรุ่งโรจน์ถึงJF Sebastianผู้แนะนำสิ่งนี้ในที่อื่น )
Eliah Kagan

9

หนึ่งในความงามของ apt-get (และ APT ทั่วไป) คือการที่พวกเขาเก็บล็อกไฟล์เกือบทุกอย่างแม้กระทั่งการส่งออกที่ขั้วของคำสั่งใด ๆ /var/log/aptที่คุณเรียกใช้รางใน ตัวอย่างเช่นนี่เป็นรายการสุดท้ายใน/var/log/apt/term.log:

Log started: 2014-06-20  16:46:08
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...
Log ended: 2014-06-20  16:46:33

ตอนนี้เปรียบเทียบกับผลลัพธ์ที่แท้จริง:

➜  ~  sudo apt-get remove xdotool 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libxdo3
Use 'apt-get autoremove' to remove it.
The following packages will be REMOVED:
  xdotool
0 upgraded, 0 newly installed, 1 to remove and 2 not upgraded.
After this operation, 135 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...

มันบันทึกฉันหลายบรรทัดที่ไม่เกี่ยวข้องในกรณีส่วนใหญ่และมันจะทำโดยอัตโนมัติ ดังนั้นคุณไม่ต้องการคำสั่งพิเศษใด ๆ เพื่อทำสิ่งที่คุณต้องการทำ apt-get ทำเพื่อคุณ


1

ลองคำสั่งที คุณสามารถดูตัวอย่างบางส่วนได้ที่นี่

การใช้งานง่าย:

  <command> | tee file

ตัวอย่าง:

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