Echo ไปที่หน้าจอเซสชันและไปที่ไฟล์


1

ฉันต้องการรันคำสั่งต่อไปนี้:

echo $RANDOM 2>&1 >> test.txt 

ในเซสชั่นหน้าจอนี้:

screen -S test -X eval 'stuff "echo $RANDOM 2>&1 >> test.txt\015"'

อย่างไรก็ตามแทนที่จะดำเนินการมันสะท้อนต่อไปนี้:

echo  2>&1 >> test.txt

ผมทำอะไรผิดหรือเปล่า?

ฉันต้องการechoคำสั่งไม่เพียง แต่บันทึก ouptut ไว้test.txtแต่เพื่อแสดงผลลัพธ์นั้นไปยังหน้าจอเช่นกัน

คำตอบ:


1

คุณสามารถทำสิ่งนี้:

screen -S test -X exec bash -c 'echo RANDOM=$RANDOM 2>&1 >> test.txt'

หากคุณต้องการเห็นผลลัพธ์และบันทึกในเวลาเดียวกันคุณสามารถใช้tee:

screen -S test -X exec bash -c 'echo RANDOM=$RANDOM 2>&1 | tee -a test.txt'

อะไรนะsh -c?
Szymon Toda

มันจะถูกเรียกใช้ใน cronjob ดังนั้นผมจึงไม่คิดว่าteeเป็นความคิดที่ดี
Szymon ดะ

เรียกใช้คำสั่งที่ระบุในshเชลล์ teeมีคำสั่งภายในเปลือก (ส่วนหนึ่งของ'...') ผลลัพธ์จะปรากฏให้เห็นเฉพาะภายในscreenเซสชั่น
Janos

สิ่งนี้จะได้ผลถ้าหากว่า/bin/shเป็น Bash RANDOMตัวแปรไม่อยู่ใน Dash
เดนนิส

@Dennis จริงเปลี่ยนbash
janos

0
$ screen -S test -X stuff 'echo \$RANDOM >> /tmp/test 2>&1\n'

หรือถ้าคุณต้องการทำสำเนาผลลัพธ์และจัดการมันโดยไม่มีteeเหตุผล

$ screen -S shell -X stuff 'echo \$RANDOM 2>&1 | while read; do printf "%s\\n" "\$REPLY"; printf "%s\\n" "\$REPLY" >> /tmp/test; done\n'

ผมถือว่าคุณต้องการเปลี่ยนเส้นทางไปยังไฟล์ทั้งสองstdinและstdoutของคุณและ2>&1 >> test.txtได้รับการตั้งใจผิดพลาด


มันทำอะไร มันวางecho $RANDOM > /tmp/test 2>&1และดำเนินการ แต่ test.txt ไม่ได้รับการปรับปรุงและได้ผลลัพธ์ออกมาในหน้าจอ actuall
Szymon ดะ

@Ultra แน่นอนมันไม่ได้อัปเดต./test.txt- /tmp/testมันปรับปรุง :) แต่สิ่งที่คุณคาดหวังเอาท์พุทถ้ามันถูกเปลี่ยนเส้นทางไปยังไฟล์โดยคุณ คุณสามารถใช้teeถ้าคุณต้องการทำซ้ำผลลัพธ์
Dmitry Alexandrov

@ Ultra มันไม่ชัดเจนสำหรับฉันจากคำถามของคุณที่คุณต้องการทำซ้ำผลลัพธ์ และคุณได้พูดไปแล้วว่าคุณต้องการหลีกเลี่ยงtee- ฉันไม่เห็นเหตุผลใด ๆ แต่แน่นอนว่ามันเป็นไปได้ด้วย GNU Bash ดังนั้นฉันจึงอัพเดทคำตอบของฉัน
Dmitry Alexandrov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.