คำตอบ:
ใช้scriptคำสั่ง มันจะคัดลอกทุกอย่างที่ไปที่หน้าจอในไฟล์
script -c "sudo apt-get install things" script-file.script
scriptส่งเอาต์พุตคำสั่งไปยังไฟล์ แต่ไม่แสดงบนหน้าจอ
script -c "history" ~/hist.txtและเห็นผลลัพธ์ที่ระบุScript startedและScript doneแต่ฉันไม่เห็นผลลัพธ์จากคำสั่งจริงบนหน้าจอ
historyเป็นเชลล์ที่สร้างขึ้นไม่ใช่คำสั่งภายนอก สิ่งที่เกิดขึ้นคือ: 1) สคริปต์เริ่มทำงาน 2) สคริปต์ค้นหาคำสั่งประวัติไม่พบดังนั้นจึงเดาได้ว่าควรรันผ่านเชลล์ 3) สคริปต์รันคำสั่งhistory ผ่านเชลล์ 4) เชลล์ใหม่เริ่มทำงานและดำเนินการคำสั่งประวัติภายใน เนื่องจากนี่เป็นเชลล์ที่ไม่ใช่เชิงโต้ตอบใหม่ประวัติจึงไม่มีอะไรจะพูด
scriptยังสามารถเรียกใช้แบบโต้ตอบ เพียงพิมพ์scriptที่พรอมต์คำสั่ง คุณจะได้รับเชลล์ใหม่และคำสั่งใด ๆ ที่คุณพิมพ์จะมีการบันทึกเอาต์พุต พิมพ์exitเพื่อจบเชลล์และบันทึกไฟล์ ตามค่าเริ่มต้นเอาต์พุตจะถูกเรียกtypescriptและมันจะมีทุกอย่างที่แสดงบนหน้าจอของคุณไม่ว่าคุณจะพิมพ์หรือมันเป็นเอาท์พุทของคำสั่ง historyคำสั่งควรจะยังคงมีอยู่ในเปลือกใหม่เช่นกัน
คุณสามารถใช้teeคำสั่งเพื่อทำสิ่งนี้ให้สำเร็จ
sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt
ดูที่นี่สำหรับข้อมูลเพิ่มเติมหรือดำเนินการman tee
หมายเหตุ: ตามที่คนอื่น ๆ ได้กล่าวไว้2>&1จำเป็นต้องเปลี่ยนเส้นทาง STDERR ไปยัง STDOUT เพื่อตรวจจับข้อผิดพลาด ดูคำถาม StackOverflow นี้สำหรับคำอธิบายที่ดีเกี่ยวกับสิ่งที่2>&1ทำ
scriptการใช้คำสั่ง ดังนั้นข้อดีเช่นการทุบตีเสร็จจะง่ายกว่าสำเร็จ
-c "something ...": ถ้าจะปล่อยคุณไปยังเชลล์และเสร็จสิ้นเมื่อคุณออกจากเชลล์นั้น อนุญาตให้ใช้คำสั่งหลายคำสั่ง ฯลฯ นอกจากนี้ยังมี "การจัดรูปแบบ" ข่าวสารเพิ่มเติมทำให้สามารถเล่นซ้ำสิ่งต่าง ๆ ได้ (เช่น: หน้าจอที่ชัดเจน ฯลฯ ) (แต่ยังสามารถทำให้เอาท์พุต ... ymmv)
|&แทนการ2>&1 |ทุบตี
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ผู้แนะนำสิ่งนี้ในที่อื่น )
หนึ่งในความงามของ 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 ทำเพื่อคุณ
apt-getใช่มั้ย?