จะเปลี่ยนเส้นทางไปยังหน้าจอรวมถึงไฟล์ได้อย่างไร?


12

เป้าหมายของฉันคือบันทึกผลลัพธ์ทั้งหมดจากสคริปต์ไปยังไดเรกทอรีที่สคริปต์กำลังจะสร้าง

ตัวอย่างเช่นฉันมี:

~/.abc.sh:

#! /bin/bash
rails new myapp

เมื่อฉันวิ่ง ...

cd ~/code
. ~/.abc.sh

... ที่จะสร้างแอพพลิเค Rails ~/code/myappใหม่ในไดเรกทอรี

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

ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


23

คุณสามารถใช้teeคำสั่งเพื่อ:

command | tee /path/to/logfile

ความเท่าเทียมโดยไม่ต้องเขียนลงไปในเปลือกจะเป็น:

command > /path/to/logfile

หากคุณต้องการผนวก ( >>) และแสดงผลลัพธ์ในเชลล์ให้ใช้-aตัวเลือก:

command | tee -a /path/to/logfile

โปรดทราบว่าท่อจะจับ stdout เพียงข้อผิดพลาดในการ stderr teeจะไม่ได้รับการประมวลผลโดยท่อที่มี หากคุณต้องการบันทึกข้อผิดพลาด (จาก stderr) ให้ใช้:

command 2>&1 | tee /path/to/logfile

ซึ่งหมายความว่า: เรียกใช้commandและเปลี่ยนเส้นทางสตรีม stderr (2) ไปยัง stdout (1) ที่จะถูกส่งผ่านไปยังไปป์ด้วยteeแอปพลิเคชัน


คุณหมายถึง~/.abc.sh | tee <file>อะไร ถ้าเป็นเช่นนั้นปัญหาคือฉันไม่ทราบว่าสคริปต์จะสร้างแอพพลิเคชั่นใดเมื่อฉันเรียกมันดังนั้นฉันจะรู้ได้อย่างไรว่าจะให้fileเหตุผลอะไรในการโต้แย้ง (ขอบคุณสำหรับตัวอย่างที่ดี)
Zabba

@Zabba: แล้วการสร้างไฟล์ชั่วคราวและย้ายมันในภายหลัง?
Lekensteyn

ตกลงว่าควรทำงาน :) ในเรื่องนั้นฉันจะสร้างไฟล์ชั่วคราวด้วยชื่อแบบสุ่มที่ฉันสามารถส่งออกไปแล้วคัดลอกไปยังตำแหน่งที่ต้องการหลังจากนั้นได้อย่างไร มีคำสั่งในตัวเพื่อรับ "ชื่อไฟล์ temp" หรือไม่?
Zabba

@Zabba: mktempคำสั่งสำหรับที่เป็น man mktempดูหน้าคู่มือ
Lekensteyn

work ทำงานเหมือนมีเสน่ห์
Sun Junwen

0

scriptจะเริ่มเซสชันแบบโต้ตอบและบันทึกผลลัพธ์ทั้งหมด (stdout / stderr ฯลฯ ) ไปยังไฟล์หรือ (ด้วย-cพารามิเตอร์) จะเรียกใช้คำสั่งและบันทึกผลลัพธ์ของสิ่งนั้น

script -c ~/.abc.sh -f abc.log

หมายเหตุ: ในเซสชันโต้ตอบคุณสามารถหยุดการบันทึกได้เพียงแค่ออกจากเซสชันตามปกติ (เช่นexitหรือCtrl-D)

สำหรับการบันทึกเซสชั่นกับการเล่นวิดีโอคุณยังสามารถลองasciinema

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