คำถามติดแท็ก stdout

stdout เป็นชื่อของ descriptor ไฟล์เอาต์พุตเริ่มต้นของกระบวนการ เนื่องจากไม่มีอะไรพิเศษเกี่ยวกับ "stdout" คุณ * ไม่ควรใช้แท็กนี้ ใช้แท็ก [io-redirection] สำหรับคำถามเกี่ยวกับวิธีเปลี่ยนเส้นทางเอาต์พุตใช้ [file-descriptors] สำหรับคำถามเกี่ยวกับวิธีจัดการตัวอธิบายไฟล์ใช้ [lock] สำหรับคำถามเกี่ยวกับการล็อกไฟล์และใช้ [files] สำหรับคำถามทั่วไปเกี่ยวกับ การทำงานของไฟล์

2
สคริปต์เพื่อทดสอบแป้นคีย์บอร์ดอย่างรวดเร็วทั้งหมด
ฉันต้องตรวจสอบโน้ตบุ๊กบางตัวเพื่อหาแป้นคีย์บอร์ดที่ไม่ดีดังนั้นฉันจึงอยากเร่งความเร็วให้มากที่สุด ฉันไม่พบสิ่งใดสำหรับงานนี้ดังนั้นความคิดของฉันคือสคริปต์ที่อ่านคีย์ที่กดและรู้ว่าแป้นคีย์บอร์ดทั้งหมดดังนั้นฉันจึงสามารถทุบตีมันได้อย่างรวดเร็วและรายงานว่ายังไม่ได้กด ฉันคิดว่าฉันจะประสบความสำเร็จที่มีทั้งshowkeyหรือxev, grepping เอาท์พุท: xev | grep keysym ตัวอย่างผลลัพธ์: state 0x10, keycode 46 (keysym 0x6c, l), same_screen YES, state 0x10, keycode 33 (keysym 0x70, p), same_screen YES, state 0x11, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES, state 0x10, keycode 51 (keysym 0x5d, bracketright), same_screen YES, state 0x10, keycode 36 …
14 bash  grep  awk  keyboard  stdout 

2
เปลี่ยนเส้นทาง stderr จากสคริปต์ที่รันอยู่แล้ว
ฉันใช้สคริปต์มาหลายวันแล้ว ฉันเปลี่ยนเส้นทาง stdout ไป$HOME/mylogแล้ว แต่ไม่เปลี่ยนเส้นทาง stderr เนื่องจากฉันคิดว่าจะไม่มีอะไรเกิดขึ้น ทันใดนั้นหลายพันบรรทัดก็เริ่มปรากฏบน stderr ดังนั้นฉันจึงหยุดงานชั่วคราว มีวิธีที่ฉันสามารถเปลี่ยนเส้นทาง stderr $HOME/myerrจากนี้ไปโดยไม่ต้องรีสตาร์ทสคริปต์หรือไม่ ฉันเข้าถึง sudo บนกล่องได้และเป็น OS X บางทีมีบางอย่างที่ใช้ dtools trapping? ฉันไม่สามารถทำงานที่สคริปต์ทำหายไปและเริ่มต้นใหม่ตั้งแต่ต้น มีวิธีการ "ถ่ายโอนข้อมูลวัตถุในหน่วยความจำ" บนดิสก์ตรึงโปรแกรมแก้ไขตัวแปร (เช่นตัวอธิบายไฟล์) และดำเนินการต่อด้วยบริบทใหม่หรือไม่

2
สิ่งที่ป้องกันไม่ให้ stdout / stderr จาก interleaving?
ว่าฉันใช้กระบวนการบางอย่าง: #!/usr/bin/env bash foo & bar & baz & wait; ฉันรันสคริปต์ด้านบนดังนี้: foobarbaz | cat เท่าที่ฉันสามารถบอกได้ว่าเมื่อใดก็ตามที่กระบวนการเขียนไปยัง stdout / stderr ผลลัพธ์ของมันจะไม่แทรกสอด - แต่ละบรรทัดของ stdio นั้นดูเหมือนจะเป็นอะตอม มันทำงานอย่างไร ยูทิลิตี้อะไรควบคุมวิธีแต่ละอะตอมเป็นอะตอม
14 shell  osx  stdout  output  stderr 

3
ส่งออกโดยตรงไปยังท่อและ stdout
ฉันสงสัยว่ามีวิธีที่จะส่งออกท่อของคำสั่งและตรงไปยัง stdout ตัวอย่างเช่นfortuneพิมพ์คุกกี้โชคลาภและคัดลอกไปยังคลิปบอร์ด: $ fortune | tee >(?stdout?) | pbcopy "...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and the Ugly)." (By Matt Welsh)
14 bash  pipe  stdout  tee 

1
`unbuffer` หรือ` stdbuf` สำหรับการลบ stdout buffering?
มีความแตกต่างระหว่าง unbuffer (1) และ stdbuf (1) หรือไม่? จากสิ่งที่ฉันรวบรวม unbuffer ทำมากกว่า "ความพยายามที่ดีที่สุด" ในการเรียกใช้ฟังก์ชัน libc set (X) buf ที่จุดเริ่มต้นแล้วปล่อยให้สิ่งต่าง ๆ เป็นอย่างไร
13 utilities  io  stdout  buffer 

5
มีวิธีการดำเนินการไบนารีพื้นเมืองจากไปป์หรือไม่
echo 'main(){}' | gcc -xc - -o /dev/stdout | ??? มีวิธีรันไบนารีเอาต์พุตบนระบบที่เหมือนยูนิกซ์หรือไม่? แก้ไข:ฉันต้องการมันเพื่อเรียกใช้เอาต์พุตของ g ++ ในสภาพแวดล้อมแบบ sandbox ที่ฉันไม่สามารถเขียนไฟล์ใด ๆ (ไม่มีอันตรายฉันสัญญา)

6
ในบางเวลาจากนี้ทำบางสิ่งบางอย่าง (และอาจแสดงผลลัพธ์ในคอนโซล)
ฉันใช้เซิร์ฟเวอร์ Ubuntu 16.04 และฉันต้องการที่จะใช้ยูทิลิตี้atในเซสชันปัจจุบันของฉันเพื่อทำบางสิ่งบางอย่าง 1 นาทีนับจากนี้ (พูด, echo) โดยไม่ต้องระบุวันที่และเวลา - เพียง 1 นาทีล่วงหน้าจากเวลาปัจจุบัน สิ่งนี้ล้มเหลว: echo 'hi' | at 1m เหตุผลที่ฉันเลือกatมากกว่าsleepเพราะช่วงพักการนอนหลับเป็นช่วงปัจจุบันและเหมาะสำหรับการชะลอคำสั่งในเซสชันอื่นมากกว่าที่เราทำงานด้วยเวลาส่วนใหญ่ AFAIR atไม่ทำงานในลักษณะนี้และจะไม่ทำให้เสียเวลาของฉัน Update_1 โดยคำตอบของ Pied Piper ฉันได้ลอง: (sleep 1m; echo 'hi') & ฉันมีปัญหากับวิธีนี้: กระแสข้อมูล "สวัสดี" ถูกพิมพ์ภายในพรอมต์หลักของฉันและเพิ่มพรอมต์รองว่างเปล่า ( _) ทันทีภายใต้พรอมต์หลักที่มีให้ดู: USER@:~# (sleep 1m; echo 'hi') & [1] 22731 USER@:~# hi ^C …
12 console  stdout  at  sleep  delay 

6
โปรแกรมที่สามารถบัฟเฟอร์ stdin หรือไฟล์
นอกเหนือจากการใช้แฟ้มชั่วคราวเพื่อช่วยเหลือมีวิธี / โปรแกรมอาจบัฟเฟอร์ข้อมูลจากแต่ไม่ออกเนื้อหาจนกว่าจะได้รับstdin EOFฉันไม่ต้องการใช้ตัวแปรเชลล์ (เช่นbuffer=$(cat)) โปรแกรมนี้ควรทำงานตามด้านล่าง (สมมติว่าชื่อโปรแกรมคือbuffered-cat) $ buffered-cat line 1 line 2 line 3 ^D # Ctr-D here(End of Line) หลังจากที่โปรแกรมได้รับ^Dแล้วbuffered-catส่งออกเนื้อหา line 1 line 2 line 3
12 shell  stdout  buffer 

1
เหตุใดจึงสามารถใช้คำสั่งเดียวกันสร้างเอาต์พุตมากขึ้นใน tty มากกว่าใน pts / gnome-terminal
gnome ขั้ว: $ sudo update-grub [sudo] password for user: Generating grub configuration file ... Found background image: .background_cache.png Found linux image: /boot/vmlinuz-3.16.0-4-amd64 Found initrd image: /boot/initrd.img-3.16.0-4-amd64 done tty1 ตามที่เข้าถึงได้โดยCtrl+ Alt+ F1: $ sudo update-grub [sudo] password for user: Generating grub configuration file ... Found background image: .background_cache.png Found linux image: …

4
วิธี จำกัด จำนวนบรรทัดที่เอาต์พุตของคำสั่งมีอยู่ใน bash?
ฉันเริ่มดาวน์โหลดไฟล์ขนาดใหญ่ในพื้นหลังโดยใช้ $ nohup wget http://example.tld/big.iso & ซึ่งยังทำให้ฉันไฟล์ที่มีการส่งออกของnohup.outwget ตอนนี้ถ้าฉันต้องการดูขั้นตอนการดาวน์โหลดในภายหลังฉันสามารถใช้$ tail -f nohup.outแต่นั่นจะทำให้หน้าต่างเทอร์มินัลของฉันเร็วขึ้นกว่าที่ฉันต้องการ สิ่งที่ฉันต้องการเห็นคือบรรทัดสุดท้ายที่อัปเดตตลอดเวลา (เช่นเมื่อใช้wgetคนเดียว) ฉันพยายาม$ tail -n 1 -f nohup.outแต่ดูเหมือนว่าจะส่งผลกระทบเฉพาะ tailin เริ่มต้น ' โดยทั่วไปแล้วหากเป็นไปได้ที่จะ จำกัด (ในกรณีนี้คือ 1) จำนวนบรรทัดของเอาต์พุตของคำสั่งที่มีอยู่ / มองเห็นได้จะช่วยแก้ปัญหานี้ได้ เรียงลำดับของการมีผลลัพธ์ในบัฟเฟอร์แบบวงกลม - แค่คิดว่าแถบความคืบหน้าปกติ$ wget example.tld/big.isoจะพิมพ์ มีวิธีแก้ปัญหาเหรอ? หรือฉันกำลังปีนต้นไม้ผิดทาง? (หมายความว่ามันจะง่ายกว่าไหมในการ จำกัดnohupเอาต์พุตหรือทำอย่างอื่น?)
11 bash  tail  nohup  stdout 

5
grep วิธีการระงับการแสดงไฟล์ที่ไม่ตรงกัน?
ฉันพยายามค้นหาไฟล์ที่มีคำเฉพาะที่ใช้grepอยู่ มีไฟล์จำนวนมากในไดเรกทอรี (> 500) คำสั่งที่ฉันวิ่ง $ grep 'delete' * เอาท์พุต validate_data_stage1:0 validate_data_stage2:0 validate_data_stage3:0 validate_data_stage4:0 validate_data_stage5:0 validate_input_stage1:0 validate_input_stage2:0 validate_input_stage3:0 validate_input_stage4:0 .... and hundred of such lines ไฟล์เหล่านี้เป็นไฟล์ที่ไม่มีการจับคู่ที่กำหนด ฉันต้องการระงับบรรทัดเหล่านั้นไม่ให้แสดงจนถึง stdout ฉันรู้ว่า-qสวิตช์ แต่นั่นจะระงับเอาต์พุตทั้งหมดซึ่งฉันไม่ต้องการ ฉันจะทำอย่างไร

3
ผลลัพธ์จากแอปพลิเคชันเริ่มต้นจากตัวจัดการหน้าต่างไปที่ไหน
หากคุณเริ่มต้นแอปพลิเคชันจากเทอร์มินัลคุณสามารถเห็นเอาต์พุตไปยัง stdout และ stderr แต่หากแอปพลิเคชันเริ่มต้นจากตัวจัดการหน้าต่างโดยทั่วไปผลลัพธ์ไปยังไฟล์เหล่านี้ไปที่ใด ถึง / dev / null?
10 xorg  logs  stdout 

2
ดำเนินการคำสั่งในเทอร์มินัลที่ใช้งานระยะไกล
สมมติว่าคุณมีเทอร์มินัลอีมูเลเตอร์ (T1) เปิดด้วย PID 6350 จากเทอร์มินัลอื่นให้พิมพ์คำสั่งนี้ (C1): echo "ls\n" > /proc/6350/fd/0 สิ่งนี้เขียนlsและขึ้นบรรทัดใหม่ใน T1 แต่ไม่ได้ดำเนินการ ทำไม? ฉันพยายามใช้cat|bashด้วยecho "ls\n" > /proc/catid/fd/0แต่ก็ยังไม่ได้ดำเนินการ ฉันจะสะท้อนคำสั่งไปยังเทอร์มินัลอื่นและสั่งการได้อย่างไร? คำตอบที่เป็นไปได้: $ mkfifo toto; $ bash < toto; $ echo "ls" > toto; ในกรณีนี้คุณไม่สามารถเขียนได้อีกต่อไปในเทอร์มินัลโดยตรง (ทุกอย่างจะแสดงในลักษณะเดียวกับที่แสดงคำสั่ง (C1) ในเทอร์มินัลนี้

2
การเชื่อมต่อ STDOUT และ STDIN หมายถึงอะไร
ฉันอ่านหนังสือมันพูดว่า: ทุกกระบวนการมีช่องทางการสื่อสารอย่างน้อยสามช่อง: "อินพุตมาตรฐาน" (STDIN), "เอาต์พุตมาตรฐาน" (STDOUT) และ "ข้อผิดพลาดมาตรฐาน" (STDERR) คำสั่งส่วนใหญ่ยอมรับอินพุตจาก STDIN และเขียนเอาต์พุตไปยัง STDOUT พวกเขาเขียนข้อความแสดงข้อผิดพลาดไปยัง STDERR การประชุมนี้ช่วยให้คุณสามารถใช้คำสั่งสตริงร่วมกันเช่นแบบเอกสารสำเร็จรูปเพื่อสร้างไปป์ไลน์คอมโพสิต เปลือกตีความสัญลักษณ์<, >และ>>เป็นคำแนะนำในการเปลี่ยนเส้นทางการป้อนคำสั่งหรือการส่งออกไปยังหรือจากไฟล์ ในการเชื่อมต่อ STDOUT ของคำสั่งเดียวกับ STDIN ของอีกคำสั่งให้ใช้| สัญลักษณ์ที่รู้จักกันทั่วไปว่าเป็นไปป์ ps -ef | grep httpd ดังนั้นโดยทั่วไปสิ่งที่กล่าวคืออินพุตมาตรฐานเป็นคำสั่งที่อนุญาตให้ผู้ใช้เขียนไฟล์ในขณะที่เอาต์พุตมาตรฐานเป็นคำสั่งที่มี bash เชลล์เขียนเอาต์พุตไปยังเชลล์และข้อผิดพลาดมาตรฐานเป็นเหมือนเอาต์พุต แต่เป็นเพียง เรียกใช้เมื่อมีข้อผิดพลาดในระบบไฟล์ จากนั้นเราไปถึงส่วนของการเชื่อมต่อ STDOUT และ STDIN และฉันก็หลงทาง

1
`นักเทียบท่าบันทึก foo | less` ไม่สามารถค้นหาหรือเลื่อนได้ แต่ `loger log foo 2> & 1 | less` คือ
การใช้ข้อความใดข้อความหนึ่งให้อ่านได้ แต่เฉพาะกับการเปลี่ยนเส้นทาง stderr สามารถหนึ่งเลื่อนหรือพิมพ์ / somepattern และได้รับการแข่งขัน หากไม่มีการค้นหาจะให้ "ไม่มีอะไรให้ค้นหา (กด RETURN)" และคอลัมน์ของ ~ ให้ stderr และ stdout ไม่เหมือนกัน แต่ทำไมแสดงน้อยกว่าพวกเขาเหมือนกันจนกว่าฉันจะเริ่มทำอะไรน้อย นี่อาจเป็นสิ่งที่หลายหน้าต่างแปลก ๆ ที่ฉันไม่เข้าใจ คิด?
10 pipe  less  stdout  stderr 

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