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

การเปลี่ยนเส้นทางคือการเปลี่ยนสตรีมข้อมูลมาตรฐานเพื่อให้มาจากแหล่งอื่นที่ไม่ใช่ต้นทางเริ่มต้นหรือจากนั้นไปยังปลายทางอื่นที่ไม่ใช่ปลายทางเริ่มต้น


8
ความแตกต่างระหว่าง "การเปลี่ยนเส้นทาง" และ "ท่อ" คืออะไร?
คำถามนี้อาจฟังดูโง่เล็กน้อย แต่ฉันไม่เห็นความแตกต่างระหว่างการเปลี่ยนเส้นทางและไพพ์ การเปลี่ยนเส้นทางที่ใช้ในการเปลี่ยนเส้นทาง stdout / stdin / stderr ls > log.txtเช่น ท่อที่ใช้ในการให้การส่งออกของคำสั่งเป็น input ls | grep file.txtเพื่อคำสั่งอื่นเช่น แต่ทำไมมีผู้ให้บริการสองรายสำหรับสิ่งเดียวกัน ทำไมไม่เพียงแค่เขียนls > grepเพื่อส่งผ่านผลลัพธ์การเปลี่ยนเส้นทางแบบนี้ไม่ใช่หรือ ฉันกำลังคิดถึงอะไร
204 pipe  redirect 


6
เชลล์สั่งรันคำสั่งและเปลี่ยนเส้นทางสตรีมในลำดับใด
ผมพยายามที่จะเปลี่ยนเส้นทางทั้งสองstdoutและstderrไปยังแฟ้มในวันนี้และฉันมาข้ามนี้: <command> > file.txt 2>&1 นี้เห็นได้ชัดว่าการเปลี่ยนเส้นทางstderrไปstdoutก่อนแล้วจึงส่งผลให้มีการเปลี่ยนเส้นทางไปยังstdoutfile.txt อย่างไรก็ตามทำไมถึงไม่สั่งซื้อ<command> 2>&1 > file.txt? หนึ่งธรรมชาติจะอ่านหนังสือเล่มนี้เป็น (สมมติว่าการดำเนินการจากซ้ายไปขวา) คำสั่งที่กำลังดำเนินการครั้งแรกที่stderrถูกนำไปstdoutแล้วส่งผลให้ถูกเขียนไปstdout file.txtแต่ข้างต้นเท่านั้นเปลี่ยนเส้นทางstderrไปที่หน้าจอ เชลล์ตีความทั้งสองคำสั่งอย่างไร

4
ความแตกต่างระหว่าง &> และ 2> & 1 คืออะไร
มีสองรูปแบบของการเปลี่ยนเส้นทางที่มีการส่งออกมาตรฐานและข้อผิดพลาดมาตรฐานเข้าออกมาตรฐาน แต่อันไหนดีกว่ากัน? และทำไมจึง&>ถือว่าสมบูรณ์แบบ ฉันไม่สามารถค้นหาความแตกต่างเพื่อให้บทเรียนมากมายและแม้กระทั่งทุบตีรัฐคู่มือที่ &>ดีกว่า! ดังนั้นทำไมฉันจะต้องใช้&>และไม่2>&1 ส่วนใหญ่ใช้bashเปลือก แก้ไข: ขอบคุณสำหรับผู้แสดงความคิดเห็น เฉพาะ &> ทำงานใน csh หรือ tcsh ใน ksh เพียง 2> & 1 ใช้งานได้ การใช้เส้นประ> ไฟล์ 2> & 1 การเปลี่ยนเส้นทางเท่านั้น แล้วอันไหนที่จะใช้เพื่อให้แน่ใจว่าสคริปต์ของฉันเข้ากันได้กับระบบอื่น ๆ ไม่ว่าเชลล์ที่ใช้คืออะไร!


1
ฉันจะเปลี่ยนเส้นทางสิ่งที่ปรากฏบนเทอร์มินัลไปยังไฟล์ได้อย่างไรเมื่อใช้คำสั่ง 'น้อย'
ฉันจะเปลี่ยนเส้นทางเนื้อหาของเทอร์มินัล (เนื้อหาที่ขณะนี้ฉันกำลังมองหาไฟล์ทั้งหมดไม่ได้เมื่อใช้lessคำสั่ง) เป็น outfile จนกว่าฉันจะกดQเพื่อออกจากless?

3
& หมายถึงอะไรกันแน่ในการเปลี่ยนเส้นทางเอาต์พุต
ฉันเห็นสิ่งต่าง ๆ เช่นcommand 1> outหรือ2>&1เพื่อเปลี่ยนเส้นทาง stderr แต่บางครั้งฉันก็เห็น&>ตัวเอง ฯลฯ วิธีที่ดีที่สุดที่จะเข้าใจ&คืออะไรและมันหมายถึงอะไรกันแน่?


1
เปลี่ยนเส้นทางร้องขอไปยัง IP / พอร์ตภายนอกของฉันไปยัง IP / พอร์ตภายนอกอื่นหรือไม่
เป็นไปได้หรือไม่ที่จะเปลี่ยนเส้นทางการเชื่อมต่อไปยัง IP / พอร์ตเฉพาะไปยัง IP / พอร์ตภายนอก ตัวอย่าง: เซิร์ฟเวอร์ A มี IP ภายนอก xxx.xxx.xxx.xxx เซิร์ฟเวอร์ B มี IP ภายนอก yyy.yyy.yyy.yyy ผู้ใช้ส่งคำขอไปยังเซิร์ฟเวอร์ A บนพอร์ต 2106 ฉันต้องการเปลี่ยนเส้นทางไปยังเซิร์ฟเวอร์ B ที่พอร์ต 2106

3
จะผ่าน 2> / dev / null เป็นตัวแปรได้อย่างไร
ฉันมีรหัสนี้ใช้งานได้: # Hide irrelevant errors so chrome doesn't email us in cron if [[ $fCron == true ]] ; then google-chrome --headless --disable-gpu --dump-dom \ "$RobWebAddress" > "$DownloadName" 2>/dev/null else # Get silly error messages when running from terminal google-chrome --headless --disable-gpu --dump-dom \ "$RobWebAddress" > "$DownloadName" fi ถ้าฉันพยายามย่อให้สั้นลงเช่นนี้: # …

2
จะเปลี่ยนเส้นทางไปยังหน้าจอรวมถึงไฟล์ได้อย่างไร?
เป้าหมายของฉันคือบันทึกผลลัพธ์ทั้งหมดจากสคริปต์ไปยังไดเรกทอรีที่สคริปต์กำลังจะสร้าง ตัวอย่างเช่นฉันมี: ~/.abc.sh: #! /bin/bash rails new myapp เมื่อฉันวิ่ง ... cd ~/code . ~/.abc.sh ... ที่จะสร้างแอพพลิเค Rails ~/code/myappใหม่ในไดเรกทอรี เมื่อ Rails กำลังสร้างแอพมันจะแสดงข้อความจำนวนมากที่ฉันต้องการรวบรวมและเก็บไว้ในล็อกไฟล์ในไดเรกทอรีเดียวกันกับrailsคำสั่งที่สร้างขึ้นใหม่ ฉันต้องการแสดงข้อความนั้นในเทอร์มินัลเช่นกัน ฉันจะทำสิ่งนี้ได้อย่างไร
12 bash  redirect 

5
ย่อหรือรวมหลายบรรทัดของ `&> / dev / null & '
ทุกครั้งที่เริ่มต้นเครื่องฉันเรียกใช้โปรแกรมต่อไปนี้: $ cat start.sh #! /bin/bash google-chrome &> /dev/null & lantern &> /dev/null & xdg-open . &> /dev/null & emacs &> /dev/null & code ~/Programs/ &> /dev/null & xdg-open ~/Reference/topic_regex.md &> /dev/null & ยุ่งยาก&> /dev/null &... ฉันจะทำให้ตรรกะสั้นลงได้อย่างไร

1
วิธีตั้งค่า localhost เพื่อเปลี่ยนเส้นทางเว็บไซต์
ฉันถามคำถามนี้จากสถานการณ์ที่น่าอึดอัดใจ อย่างที่คุณอาจทราบหรือไม่ทราบว่า Google ถูกบล็อกในประเทศจีน ผลลัพธ์ที่น่าท้อใจ (อย่างน้อยสำหรับฉัน) ก็คือการไปที่ไซต์ Stack Exchange เช่น Stack Overflow ที่ฉันใช้งานอยู่ในขณะที่ฉันกำลังศึกษาอยู่ในสหราชอาณาจักรยากมาก อาจใช้เวลามากกว่า 20 วินาทีในการโหลดหน้า ปัญหาคือว่าไซต์ Stack Exchange พึ่งพาสคริปต์ JAVA ภายนอก http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js แต่เนื่องจาก Google ถูกบล็อกจึงไม่สามารถเข้าถึงสคริปต์นี้ได้ แต่ Firefox จะใช้เวลานานพอสมควรในการรับสคริปต์นี้ (โปรดทราบว่ารุ่น jquery อาจเปลี่ยนแปลงในอนาคต แต่เป็น 1.12.4 เมื่อมีการถามคำถามนี้ให้ใช้ F12 เพื่อตรวจสอบรุ่นที่ทันสมัยที่สุด) ที่จริงแล้วสคริปต์นี้สามารถเข้าถึงได้อย่างอิสระจาก https://code.jquery.com/jquery-1.12.4.min.js ดังนั้นทางออกที่ดีที่สุดคือเปลี่ยนเส้นทางหน้าเว็บภายใต้โดเมน Google ไปยังโดเมน Jquery เป็นไปได้โดยแก้ไข/etc/hostsไฟล์? ในขณะนี้ฉันกำลังทำการบล็อกเว็บเพจที่โหดร้าย: 127.0.0.1 ajax.googleapis.com แม้ว่า Firefox จะหยุดพยายามโหลดสคริปต์นี้ดังนั้นการเยี่ยมชมไซต์แลกเปลี่ยนสแต็คจะเร็วเท่ากับปกติ …

2
การเปลี่ยนเส้นทางเอาต์พุตคำสั่งโดยใช้ '- <<(…)'
ฉันต้องการที่จะดึงชาซัม ใช้งานได้ แต่ทุกคนสามารถอธิบายได้ว่าทำไม sed 's/^.*= //' -&lt; &lt;(openssl dgst -sha256 filename) ฉันคุ้นเคยกับ$( )โครงสร้าง แต่ไม่สามารถหาเอกสาร&lt;( )ประกอบควบคู่กับ-&lt;ซึ่งฉันคิดว่ากำลังเปลี่ยนเส้นทางไปยังsedSTDIN ฉันรู้ว่ามีวิธีง่ายกว่านี้ แต่สิ่งก่อสร้างนี้ทำให้ฉันหลง
10 bash  redirect  syntax 

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