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

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

4
Bash: พรอมต์ระยะไกลแบบโต้ตอบ
ฉันมีสคริปต์ที่เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลและตรวจสอบว่ามีการติดตั้งแพคเกจ: ssh root@server 'bash -s' < myscript.sh myscript.sh: OUT=`rpm -qa | grep ntpdate` if [ "$OUT" != "" ] ; then echo "ntpdate already installed" else yum install $1 fi ตัวอย่างนี้สามารถทำให้ง่ายขึ้น นี่คือmyscript2.shสิ่งที่มีปัญหาเดียวกัน: read -p "Package is not installed. Do you want to install it (y/n)?" choise ปัญหาของฉันคือทุบตีไม่สามารถอ่านคำตอบของฉันแบบโต้ตอบ มีวิธีดำเนินการสคริปต์ท้องถิ่นจากระยะไกลโดยไม่สูญเสียความสามารถในการแจ้งผู้ใช้หรือไม่
16 bash  shell-script  ssh  stdin  read 

1
vimdiff เพื่อเปรียบเทียบผลลัพธ์แทนไฟล์
ฉันกำลังพยายามเปรียบเทียบเอาต์พุตคำสั่งสองรายการ (ไม่มีไฟล์) vimdiff "$(tail /tmp/cachain.pem)" "$(tail /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem)" ฉันพยายามเล่นด้วยการเปลี่ยนเส้นทางไปป์vim - -cแต่ฉันต้องหายไปบางอย่าง ใครช่วยได้บ้าง
15 vim  stdout  stdin  vimdiff 

4
สร้างคำสั่งโดยใส่สตริงลงใน tty
ฉันจัดการเพื่อทำสิ่งนี้ echo -n " คำสั่ง "> / dev / tty1 ตัวอักษรจะปรากฏขึ้นและเคอร์เซอร์จะเคลื่อนที่ แต่มันก็เป็น "ผี" - หากคุณกดปุ่มจะEnterไม่มีอะไรเกิดขึ้น แก้ไข: ในกลางหน้าจอด้านล่างคุณจะเห็นว่าทำไมฉันเห็นการใช้งานนี้ (บรรทัดที่มีคำอธิบายภาพสีแดงด้านล่างบรรทัดที่มีคำอธิบายภาพสีเหลือง) เนื่องจากตอนนี้คุณไม่ได้ "แก้ไข" ข้อความบันทึกย่อจริงๆ คุณเพิ่งถูกขอให้เขียนข้อความใหม่ซึ่งจะแทนที่ข้อความของบันทึกย่อที่คุณกำลังแก้ไข (ไม่ใช่จริง ๆ ) ดังนั้นฉันคิดว่ามันสามารถแก้ไขได้โดยเพียงแค่วางข้อความเก่าลงใน tty: หากผู้ใช้กด Enter จะไม่มีการดัดแปลงใด ๆ (โปรแกรมนี้อยู่ใน Perl / MySQL แต่ฉันคิดว่ามันน่าสนใจมากกว่าที่จะขอวิธีแก้ปัญหาทั่วไปมากกว่า "ฉันจะทำสิ่งนี้ใน Perl" ได้อย่างไร) แก้ไข 2: นี่คือรหัส Perl ที่ใช้รหัส C ด้านล่าง (ใช้งานได้ตามที่ตั้งใจ) และภาพหน้าจอใหม่ - หวังว่านี่จะช่วยชี้แจงสิ่งต่าง …
15 tty  io  stdin 


3
echo หรือ print / dev / stdin / dev / stdout / dev / stderr
ฉันต้องการพิมพ์ค่าของ / dev / stdin, / dev / stdout และ / dev / stderr นี่คือสคริปต์ง่าย ๆ ของฉัน: #!/bin/bash echo your stdin is : $(</dev/stdin) echo your stdout is : $(</dev/stdout) echo your stderr is : $(</dev/stderr) ฉันใช้ท่อต่อไปนี้: [root@localhost home]# ls | ./myscript.sh [root@localhost home]# testerr | ./myscript.sh เพียง แต่$(</dev/stdin)ดูเหมือนว่าจะทำงานผมยังได้พบกับคนอื่น ๆ …

2
Bash: กระบวนการทดแทนและ stdin
บรรทัดต่อไปนี้ชัดเจน: echo "bla" | foo | bar แต่สิ่งที่อยู่ด้านล่างทำเช่นเดียวกันหรือไม่ echo "bla" | bar <(foo) echo "bla" | bar < <(foo) ข้อใดfooและbarอ่าน "bla" จาก stdin และทำไม ฉันหมายความว่าแน่นอนฉันสามารถเขียนโค้ดและตรวจสอบ แต่ฉันไม่แน่ใจว่าเป็นพฤติกรรมที่กำหนดไว้หรือฉันใช้ประโยชน์จากคุณลักษณะที่ไม่ควรเชื่อถือ

1
วิธีไพพ์ html เป็น lynx
ฉันกำลังทดสอบการโทร ajax จากคอนโซล ฉันชอบกำจัดเสียงรบกวนข้อมูล meta ที่เป็นมาร์กอัพ HTML และเพิ่งอ่านเนื้อหาดังนั้นฉันชอบที่จะไพพ์มันลงในเทอร์มินัลเบราว์เซอร์เช่น lynx แต่: curl www.google.de | lynx เพิ่งเปิด lynx ตัวอย่างใหม่ ฉันไม่ต้องการ: curl www.google.de > someFile.html && lynx someFile.html
11 pipe  curl  html  stdin  lynx 

4
รับ stdin จากไปป์ที่มีชื่อ
สิ่งที่ฉันพยายามทำคือใช้ python ในหน้าต่างเทอร์มินัลและเปลี่ยนเส้นทางมันเป็น stdin จากไพพ์ที่มีชื่อ จากนั้นฉันเขียนไปที่ไปป์ที่มีชื่อในเทอร์มินัลอื่นและมีคำสั่งที่รันบนหลาม อาคาร 1: mkfifo p1 python < p1 อาคาร 2: echo -n "print \"Hello World\"" > p1 สิ่งที่เกิดขึ้นคือ - หลามพิมพ์Hello Worldและออกจาก สิ่งที่ฉันต้องการจะทำคือให้หลามใช้คำสั่งถัดไป ฉันจะทำสิ่งนี้ในเปลือกได้อย่างไร

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

2
ฟังก์ชัน Bash ที่รับอินพุตจากพารามิเตอร์หรือไพพ์
ฉันต้องการเขียนฟังก์ชั่นทุบตีต่อไปนี้ในแบบที่มันสามารถรับอินพุตจากอาร์กิวเมนต์หรือไพพ์ได้ b64decode() { echo "$1" | base64 --decode; echo } การใช้งานที่ต้องการ: $ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" $ b64decode < file.txt $ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" $ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
10 bash  pipe  function  stdin 

2
เปลี่ยนเส้นทาง stdin และ stdout ไปยังพอร์ต
ฉันต้องการใช้โปรแกรมPที่อ่านจากstdin& เขียนถึงstdoutแต่เชื่อมต่อกับncหรืออะไรก็ตามที่อ่านจากพอร์ตที่แน่นอนและส่งออกไปยังพอร์ตอื่น # The reading is easy, here P reads from port 50505 nc -l 50505 | P ฉันจะทำให้เขียนกลับไปบอกพอร์ต 60606 ได้อย่างไร

2
การเปลี่ยนเส้นทางไฟล์ bash เป็นมาตรฐานแตกต่างจาก shell (`sh`) บน Linux อย่างไร
ฉันเขียนสคริปต์ที่สลับผู้ใช้ในขณะที่ทำงานและดำเนินการโดยใช้การเปลี่ยนเส้นทางไฟล์ไปที่มาตรฐานระบบดังนั้นจึงuser-switch.shเป็น ... #!/bin/bash whoami sudo su -l root whoami และการวิ่งด้วยbashทำให้ฉันมีพฤติกรรมที่ฉันคาดหวัง $ bash < user-switch.sh vagrant root อย่างไรก็ตามถ้าฉันรันสคริปต์ด้วยshฉันจะได้ผลลัพธ์ที่ต่างออกไป $ sh < user-switch.sh vagrant vagrant ทำไมจึงbash < user-switch.shให้ผลลัพธ์ที่แตกต่างกว่าsh < user-switch.sh? หมายเหตุ: เกิดขึ้นในสองกล่องที่แตกต่างกันที่ใช้ Debian Jessie

2
Piped input to nano
ทำไมls | nano -เปิดตัวแก้ไขใน Ubuntu แต่ปิดตัวแก้ไขและบันทึกไฟล์ลง-.saveใน CentOS ฉันจะทำให้ nano ใน CentOS ยังคงเปิดอยู่ได้อย่างไรเมื่ออ่าน stdin
9 ubuntu  centos  stdin  nano 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.