การระบุจุดสิ้นสุดของอินพุตมาตรฐาน


12

วิธีการอย่างใดอย่างหนึ่งบ่งชี้ว่าอย่างใดอย่างหนึ่งได้เสร็จสิ้นการทดสอบใน stdin?

ตัวอย่างเช่นสมมติว่าฉันต้องการเข้ารหัส 'สีน้ำเงิน' โดยใช้ MD5 (ฉันรู้ว่า MD5 นั้นไม่ปลอดภัย แต่สำหรับตัวอย่างนี้เท่านั้น) ฉันเหนื่อย

user$ blue | md5

ซึ่งฉันได้นำไปสู่การทำความเข้าใจเป็นวิธีการที่ท่อหนึ่งอินพุตเพื่อ stdin แต่มันไม่ทำงาน

แต่ถ้าฉันเพิ่งเข้า

user$ md5

ฉันสามารถป้อนคำว่า 'สีน้ำเงิน' แต่ฉันจะระบุ md5 ได้อย่างไรว่าฉันป้อนข้อความเสร็จแล้ว


2
ความพยายามครั้งแรกของคุณอาจไม่ทำงานอย่างถูกต้องเพราะคุณพยายามที่จะดำเนินการblueเป็นคำสั่งแทนที่จะสะท้อน ลองecho blue | md5แทน
แต้ม Hunner

คำตอบ:


16

คุณกำลังพูดถึงการรับ md5sum สำหรับชิ้นส่วนของข้อความ?

หากเป็นเช่นนั้นให้เรียกใช้คำสั่ง md5sum

พิมพ์ข้อความของคุณเมื่อเสร็จแล้วย้ายไปยังบรรทัดใหม่โดยกด Return

กด CTRL-D เพื่อสิ้นสุดอินพุตของคุณ

 user$ md5sum
 blue
 CTRL-D

6
นี่คือคำตอบที่ถูกต้อง Ctrl-D เป็นวิธีบัญญัติมาตรฐานเพื่อยุติการใช้แป้นพิมพ์ stdin ในคำสั่งเชลล์ แต่แปลกฉันมี / sbin / md5 - ต้นกำเนิดไม่แน่นอน แต่อาจมาจาก OpenSSL - บนระบบของฉัน (Mac OS X v10.6.3) ที่ไม่สิ้นสุดใน Ctrl-D แรก ใช้เวลา Ctrl-D ที่สองเพื่อยกเลิก openssl md5เช่นเดียวกันกับ
Spiff

4
@ ความเร็ว: คุณควรใช้สอง ^ D หากคุณไม่ต้องการขึ้นบรรทัดใหม่ หากคุณสามารถยอมรับ (หรือต้องการ) การขึ้นบรรทัดใหม่สุดท้ายดังนั้น ^ D หนึ่งรายการบนบรรทัดใหม่ควรจะพอเพียง อักขระ EOF (^ D) ล้างอินพุตบัฟเฟอร์ หากไม่มีอินพุตบัฟเฟอร์กระบวนการที่อ่านจาก tty จะได้รับการอ่านความยาวเป็นศูนย์ (เช่น EOF) ดู (เช่น) POSIX XRAT 11.1.9, EOF ; VEOF ใน termios Linux ; หรือtermios EOF ใน FreeBSD
Chris Johnsen

0

ในตัวอย่างแรกของคุณคุณต้องecho:

user$ echo "blue" | md5

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