Score:3

จับภาพเอาต์พุตของสคริปต์เพื่อเพิ่มวันที่และเวลาให้กับเอาต์พุตแบบเรียลไทม์

ธง cn

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

เพื่ออธิบาย ฉันมีตัวอย่างสคริปต์ประเภทนี้ที่ฉัน ต้องไม่แก้ไข:

#!/bin/bash
สำหรับฉันใน 2 3 1
ทำ
  echo "กำลังรอ $i วินาที..."
  นอน $i
เสร็จแล้ว

สคริปต์สร้างผลลัพธ์ต่อไปนี้:

รอ 2 วินาที ...
รอ 3 วินาที ...
รอ 1 วินาที ...

ฉันพยายามสร้างผลลัพธ์ประเภท:

2021-06-16 11:44:48 [INFO] รอ 2 วินาที ...
2021-06-16 11:44:50 [INFO] รอ 3 วินาที ...
2021-06-16 11:44:53 [INFO] รอ 1 วินาที ...

ฉันใช้ฟังก์ชันเชลล์ต่อไปนี้เพื่อจัดรูปแบบในสคริปต์ที่เรียกใช้สคริปต์เริ่มต้นของฉัน:

บันทึกการทำงาน {
   echo `วันที่ +%Y-%m-%d" "%H:%M:%S`" $@"
   ถ้า [ "$LOGFILE" !=" "" ]
   แล้ว
      echo `วันที่ +%Y-%m-%d" "%H:%M:%S`" $@" >>$LOGFILE
   ไฟ
}

เข้าสู่ระบบฟังก์ชั่นf {
   บันทึก "[INFO] $@"
}

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

pLumo avatar
in flag
คุณเรียกสคริปต์เริ่มต้นของคุณว่าอย่างไร? สิ่งนี้ใช้ได้ดีสำหรับฉัน: `./script1.sh | ในขณะที่ IFS= อ่าน -r l; ทำการเข้าสู่ระบบf "$l"; เสร็จแล้ว' ดูเพิ่มเติม https://serverfault.com/questions/72744/command-to-prepend-string-to-each-line
bac0n avatar
cn flag
`./script.sh | ts "%Y-%m-%d %H:%M:%S [ข้อมูล]"`
raj avatar
cn flag
raj
ฉันสร้างสคริปต์ที่มีสองฟังก์ชันของคุณแล้วตามด้วยโค้ดต่อไปนี้: ` while { read; } เข้าสู่ระบบf $REPLY; เสร็จแล้ว' กำลังเรียกใช้ `./script1 | ./script2` (โดยที่ `script1` เป็นสคริปต์แรกของคุณและ `script2` เป็นสคริปต์ที่กล่าวถึงข้างต้น) ให้ผลลัพธ์ที่ถูกต้องสำหรับฉัน เช่น การประทับเวลาที่แตกต่างกัน
bac0n avatar
cn flag
ไม่จำเป็นต้องใช้ `echo` จริง ๆ แค่ทำ `f(){ date "+%Y-%m-%d %H:%M:%S [INFO] $*"; }; ฉ หนึ่ง สอง สาม`
bac0n avatar
cn flag
`f(){ printf '%(%Y-%m-%d %H:%M:%S)T [%s] %s\n' -1 ข้อมูล "$*"; }; ฉ หนึ่ง สอง สาม' ยิ่งดี...
Score:2
ธง us

เดอะ คำสั่งจากแพ็คเกจ เพิ่มเติม ทำสิ่งที่คุณกำลังมองหา:

./script.sh | ท

มีตัวเลือกต่างๆ สำหรับการจัดรูปแบบเวลาประทับ ตัวอย่างเช่น

ts '%F %T [ข้อมูล]'

จะให้รูปแบบที่คุณใช้ในคำถามของคุณ

Score:0
ธง cn
vog

คุณสามารถใช้ :

./your_script.sh | ท

ของ, ถ้าคุณต้องการบางอย่างแบบพกพาที่ทำงานบนระบบที่ ไม่ได้ติดตั้ง คุณสามารถทำได้ง่ายๆ ในขณะที่ วนซ้ำโดยใช้ในตัว อ่าน สั่งการ:

./your_script.sh | ขณะอ่านบรรทัด ทำ echo "$(date +'%Y-%m-%d %H:%M:%S') [INFO] $line"; เสร็จแล้ว

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา