मुझे यह निर्धारित करने के लिए बैश में एक कमांड चाहिए कि लिनक्स ब्लॉक डिवाइस में सभी 0 बाइट्स हैं या नहीं। मुझे पता है कि मैं डिवाइस पर हेक्सडंप कर सकता हूं और आउटपुट को पार्स करने का प्रयास कर सकता हूं, लेकिन क्या कुछ और अधिक सुरुचिपूर्ण है? अगर यह किसी अन्य स्क्रिप्टिंग भाषा में आसानी से किया जा सकता है, तो मुझे भी जानना अच्छा लगेगा।
2 जवाब
मैंने डिवाइस के पहले 1MB को पढ़ने के लिए निम्नलिखित का उपयोग करके समाप्त किया
dd if=/dev/zero bs=1024 count=1024 | sed -e 's/\o00//g' | wc -c
सभी 0 बाइट वाले डिवाइस के लिए, यह परिणाम के रूप में 0 लौटाएगा।
सभी 0 बाइट असंभव है, क्योंकि कई उपकरणों के लिए यह कभी समाप्त नहीं होगा (/dev/zero
का कोई अंत नहीं है)। आप पहले कुछ बाइट्स की जांच कर सकते हैं ( /dev/zero को उस स्ट्रीम से बदलें जिसका आप परीक्षण कर रहे हैं):
count=0
while IFS= read -r -d ''
do
if [ -z "$REPLY" ]
then
let count++
else
echo "Found non-NUL character"
break
fi
if [ $count -eq 5 ]
then
echo "Found 5 NUL characters at the start of the stream"
break
fi
done < /dev/zero
संबंधित सवाल
नए सवाल
shell
'शेल' शब्द का अर्थ सामान्य रूप से टेक्स्ट-आधारित इंटरएक्टिव कमांड दुभाषियों के एक सामान्य वर्ग से है, जो अक्सर यूनिक्स और लिनक्स ऑपरेटिंग सिस्टम से जुड़ा होता है। शेल स्क्रिप्टिंग के बारे में प्रश्नों के लिए, कृपया 'बैश', 'पॉवरशेल' या 'क्श' जैसे अधिक विशिष्ट टैग का उपयोग करें। एक विशिष्ट टैग के बिना, एक पोर्टेबल (POSIX- आज्ञाकारी) समाधान ग्रहण किया जाना चाहिए, हालांकि इसके अलावा 'श्लोक' या 'श' का उपयोग करना बेहतर है।