मेरे सिस्टम / बिन में रहने वाले `[` कार्यक्रम क्या है?


32

मैं हाल ही में अपने फेडोरा के /binफ़ोल्डर को ब्राउज़ कर रहा था और एक बाइनरी नाम दिया [। मैंने उस पर अधिक जानकारी के लिए इंटरनेट पर खोज करने की कोशिश की, लेकिन मुझे कुछ भी उपयोगी नहीं मिला। यह माध्यम से चलाने के straceलिए करीब निरीक्षण के लिए भी उपयोगी कुछ भी नहीं लगता है।

वो क्या है? क्या मुझे सतर्क होना चाहिए? क्या यह एक सिस्टम समझौता का नतीजा हो सकता है? क्या मुझे इसे चलाना चाहिए? क्या यह किसी पैकेज से संबंधित है?


4
[ -f /bin/[ ] && printf "%s\n" "Don't panic"
जसोनव्रीयन

@jasonwryan हाँ, मुझे यह पता लगाने में थोड़ा समय लगा। मुझे नेट पर इसके बारे में अधिक जानकारी नहीं मिल सकी, और Google ने बहुत मदद नहीं की। इसे यहाँ पोस्ट किया है उम्मीद है कि यह अगले जो मेरे जूते में मदद कर सकता है।
NlightNFotis

10
कमांड man [क्या है यह देखने के लिए भागो [!
गिल्स एसओ- बुराई को रोकें '

@ गिल्स ईमानदार होने के लिए, मैंने किया और इसने कुछ के बारे में उल्लेख किया bash, और लगा कि कुछ और हो सकता है। यह पहली बात नहीं है जो आपके दिमाग में आती है जब आप एक बाइनरी को एक ऐसे नाम के साथ देखते हैं जिसे आपने अपनी फाइल सिस्टम में पहले कभी नहीं देखा है - या इसे किसी अन्य तरीके से रखने के लिए, आपको अपने सिर में संदेह को दूर करने के लिए कुछ और ठोस खोजना होगा। ।
NlightNFotis

4
एक है rpm -qif /bin/[पता लगाने के लिए कहाँ से ... आता है
vonbrand

जवाबों:


37

[द्विआधारी के तहत रहने वाले /binकई जीएनयू / लिनक्स वितरण में पेड़ कुछ बंद चिंतित होने के लिए नहीं है। कम से कम मेरे फेडोरा 19 में यह कोरुटिल्स पैकेज का एक हिस्सा है, जैसा कि नीचे दिखाया गया है:

$ rpm -qf /bin/[
coreutils-8.21-13.fc19.x86_64

और शेल स्क्रिप्ट या यहां तक ​​कि इंटरएक्टिव उपयोग में लिखे जाने वाले testअभिव्यक्तियों की अनुमति देने के लिए एक पर्याय है [ expression ]


16
ध्यान दें कि गोले की तरह bashएक बेसिन है testऔर [बाहरी बाइनरी को न करें।
जोर्डन

1
@jordanm, आज ज्यादातर गोले उन्हें (और कई अन्य सरल, सामान्य संचालन) बिलियन के रूप में हैं। लेकिन वह ऐसा नहीं था (या सभी गोले में ऐसा है)। यह भी POSIX द्वारा अनिवार्य किया जा सकता है।
वॉनब्रांड

2
@vonbrand pubs.opengroup.org/onlinepubs/009695399/utilities/test.html आप सही हैं। [इस विनिर्देश द्वारा एक परीक्षण कमांड की आवश्यकता है।
yegle

@vonbrand, केवल बॉर्न-जैसे गोले में आमतौर पर एक बेसिन [कमांड होता है। गैर-बॉर्न की तरह की तरह लोगों को (t)csh, rc, esआम तौर पर नहीं है ( fishएक वहाँ अपवाद नहीं है)।
स्टीफन चेजलस

5

[आदेश के रूप में ही है testआदेश।

यह आपको शेल लिपियों में सशर्त बयानों को लिखने की अनुमति देता है। सनोस मैनुअल पेज से:

   if [ "$1" = "pear" ] || [ "$1" = "grape" ] || [ "$1" = "apple" ]
   then
       command
   fi

यदि आप इसे हटाते हैं, तो स्क्रिप्ट टूट जाएगी!


शेल के लिए लिखी गई लिपियां जो [एक अंतर्निहित कमांड के रूप में नहीं हैं, वे टूट जाएंगी। ज्यादातर गोले करते हैं। फिर भी, मैं निश्चित रूप से हटाने की सिफारिश नहीं करूंगा /bin/[
कीथ थॉम्पसन

@KeithThompson, सभी गोले बिल्टइन हैं, [यह ऐसी स्क्रिप्ट्स हैं जिनमें गैर-शेल एप्लिकेशन निष्पादित होते हैं [जो टूट जाएंगे। जैसे find ... -exec [ -f {} ] \;याenv LC_ALL=C [ -f bar ]
स्टीफन चेज़लस

@ स्टेफ़ेनचेज़लस: सभी गोले? (csh और tcsh नहीं है, लेकिन शायद इस बिंदु के बगल में है।) मुझे नहीं लगता कि मैंने एक श-व्युत्पन्न शेल देखा है जो [एक बिलियन के रूप में नहीं है , लेकिन यह मत [समझो कि मूल में एक बिल्डिन था बॉर्न शेल। किसी भी मामले में, हटाना /bin/[निश्चित रूप से एक बुरा विचार होगा।
कीथ थॉम्पसन

मामूली वक्रोक्ति: testऔर [कर रहे हैं लगभग एक ही। [एक समापन की आवश्यकता है ]; testयह अनुमति नहीं देता (या ]विशेष रूप से एक तर्क का इलाज नहीं करता है )।
कीथ थॉम्पसन

2

[हमेशा परीक्षण के समतुल्य दिया जाता है, लेकिन मैंने स्पष्ट रूप से उल्लेख किया है], हालांकि यह हमेशा होता है। मैंने अभी इसे http://ss64.com/bash/test.html में पाया है :

When the [ form is used, the last argument to the command must be a ]

जो आश्वस्त कर रहा है - अंत में मेरे कहने के अनुसार मैंने पूरा किया है।

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