बैश में 'फाँसी {fd} </ dev / watchdog' क्या करता है


28

यह शाब्दिक है, {fd}प्लेसहोल्डर नहीं है। मेरे पास एक स्क्रिप्ट है जो ऐसा करती है, और किसी भी चीज़ में स्रोत नहीं है, न ही यह कहीं और {{fd} का संदर्भ देता है। क्या यह वैध बैश है?

exec {fd}</dev/watchdog

जवाबों:


34

फाइल डिस्क्रिप्टर को लेने की बजाय और उम्मीद है कि यह उपलब्ध है:

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

यह नोटेशन शेल को उस फाइल डिस्क्रिप्टर को चुनने के लिए कहता है जो वर्तमान में उपयोग में नहीं है, उस डिस्क्रिप्टर पर पढ़ने के लिए फाइल को खोलें, और दिए गए वेरिएबल को नंबर असाइन करें ( fd)।

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

मुझे यकीन है कि आप सही हैं, क्योंकि (1) मुझे याद है कि इसे कहीं पढ़ा जा रहा है, और (2) मैंने इसे बस कोशिश की (और यह काम करता है)। लेकिन मुझे यह कहीं भी प्रलेखित नहीं मिला। (बेशक, आपके जवाब पोस्ट करने से पहले मेरे पास खोज करने के लिए दस मिनट से भी कम का समय था।) क्या आप एक संदर्भ प्रदान कर सकते हैं कि यह कहाँ से प्रलेखित है?
स्कॉट

2
मैन पेज देखें, अनुभाग का दूसरा पैराग्राफ REDIRECTIONS। यह वास्तव में आप पर नहीं कूदता है, क्योंकि वे एक स्पष्ट उदाहरण नहीं देते हैं।
20

आप सही कह रहे हैं, मैंने इसे मैन बैश में मिस किया, लेकिन यह वहीं है जहां आपने कहा था। यह ध्यान दिया जाना चाहिए कि कोई भी शब्द, न कि केवल fd ब्रेसिज़ में काम करेगा, और यह एक fd> = 10. असाइन करता है
Gregg Leventhal

3
@ सही, न केवल यह केवल बैश में है, बल्कि यह केवल बास 4.1 या नए में है (इस प्रकार अब भी मैकओएस पर उपयोग किए जाने वाले 3.2 रिलीज पर उपलब्ध नहीं है)।
चार्ल्स डफी

2
@CharlesDuffy /dev/watchdogमैक ओएस एक्स पर मौजूद नहीं है, हालांकि; यह एक लिनक्स-विशिष्ट डिवाइस है।
duskwuff

11

फार्म:

{var}<filename

filenameचर में फाइल डिस्क्रिप्टर नंबर को पढ़ने और स्टोर करने के लिए शेल ओपन फाइल बनाई var{var}पुनर्निर्देशन ऑपरेटरों के बीच कोई स्थान की अनुमति नहीं है , और फ़ाइल डिस्क्रिप्टर संख्या इससे अधिक या बराबर होगी 10

यह सुविधा ksh2006 में (संस्करण ksh93r से ) से मूल थी , bashइसे bash-4.1-alpha2010 से बहुत बाद में कॉपी किया गया। 2007 से zshपहले के बदलाव को भी बनाया ।bashzsh 4.3.4


2

इसे रीडायरेक्शंस पर बैश मैनुअल सेक्शन में समझाया गया है ।

प्रत्येक पुनर्निर्देशन जो कि फ़ाइल डिस्क्रिप्टर नंबर से पहले हो सकता है, इसके बजाय फॉर्म { एनजी }} के एक शब्द से पहले हो सकता है । इस मामले में, प्रत्येक पुनर्निर्देशन ऑपरेटर को छोड़कर >&-और <&-, शेल 10 से अधिक फ़ाइल डिस्क्रिप्टर आवंटित करेगा और इसे { varname } में असाइन करेगा । तो >&-या <&-{से पहले है VARNAME } का मूल्य VARNAME पास करने के लिए फ़ाइल वर्णनकर्ता परिभाषित करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.