'exec {fd} </ dev / watchdog' ทำอะไรใน Bash


28

นั่นคือตัวอักษร{fd}ไม่ใช่ตัวยึดตำแหน่ง ฉันมีสคริปต์ที่ทำสิ่งนี้และไม่ได้แหล่งข้อมูลใด ๆ และไม่มีการอ้างอิง {fd} ที่อื่น ทุบตีนี้ถูกต้องหรือไม่

exec {fd}</dev/watchdog

คำตอบ:


34

แทนที่จะต้องเลือก file descriptor และหวังว่ามันจะพร้อมใช้งาน:

exec 4< /dev/watchdog  # Was 4 in use? Who knows?

สัญลักษณ์นี้ขอให้เชลล์เลือก descriptor ไฟล์ที่ไม่ได้ใช้งานอยู่เปิดไฟล์สำหรับอ่านบน descriptor นั้นและกำหนดหมายเลขให้กับตัวแปรที่ระบุ ( fd)

$ exec {fd}< /dev/watchdog
$ echo $fd
10

ฉันแน่ใจว่าคุณพูดถูกเพราะ (1) ฉันจำได้ว่าอ่านมันที่ไหนซักแห่งและ (2) ฉันเพิ่งลอง (และก็ใช้ได้) แต่ฉันไม่พบเอกสารใด ๆ เลย (แน่นอนว่าฉันมีเวลาน้อยกว่าสิบนาทีในการค้นหาก่อนที่คุณจะโพสต์คำตอบของคุณ) คุณสามารถให้การอ้างอิงไปยังที่ที่บันทึกไว้ได้หรือไม่?
สกอตต์

2
ดูหน้าคนวรรค 2 REDIRECTIONSของส่วน มันไม่ได้โดดไปที่คุณจริงๆเพราะพวกเขาไม่ได้ให้ตัวอย่างที่ชัดเจน
chepner

คุณถูกต้องฉันพลาดมันด้วยการทุบตีคน แต่มันอยู่ตรงนั้นที่คุณพูด ควรสังเกตว่าคำใด ๆ ไม่ใช่แค่ fd จะทำงานในวงเล็บปีกกาและมันกำหนด fd> = 10
Gregg Leventhal

3
@Scott ไม่เพียง แต่จะเป็นแบบทุบตีเท่านั้น แต่มีเฉพาะในทุบตี 4.1 หรือใหม่กว่าเท่านั้น
Charles Duffy

2
@CharlesDuffy /dev/watchdogไม่มีอยู่ใน Mac OS X เช่นกัน มันเป็นอุปกรณ์เฉพาะของ Linux
duskwuff

11

แบบฟอร์ม:

{var}<filename

ทำให้เปิดไฟล์เปลือกสำหรับการอ่านและจำนวนบ่งเก็บไฟล์ในตัวแปรfilename varไม่มีที่ว่างระหว่างได้รับอนุญาตให้เป็นผู้ประกอบการเปลี่ยนเส้นทางและจำนวนไฟล์อธิบายจะมากกว่าหรือเท่ากับ{var}10

คุณลักษณะนี้จากเดิมksh(จากรุ่น ksh93r ในปี 2006) bashคัดลอกมันมากในภายหลังbash-4.1-alphaจากปี 2010 zshนอกจากนี้ยังได้ดำเนินการเปลี่ยนแปลงเร็วกว่าbashจากzsh 4.3.4ในปี 2007


2

นี่คือคำอธิบายในส่วนคู่มือการทุบตีในการเปลี่ยนเส้นทาง

การเปลี่ยนเส้นทางแต่ละครั้งที่อาจนำหน้าด้วยหมายเลขตัวอธิบายไฟล์อาจนำหน้าด้วยคำของรูปแบบ { varname } ในกรณีนี้สำหรับโอเปอเรเตอร์การเปลี่ยนเส้นทางแต่ละตัวยกเว้น>&-และ<&-เชลล์จะจัดสรรไฟล์ descriptor มากกว่า 10 และกำหนดให้กับ { varname } หาก>&-หรือ<&-นำหน้าด้วย { varname } ค่าของvarname จะกำหนดตัวให้คำอธิบายไฟล์ที่จะปิด

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