मैं चेतावनी को कैसे ठीक करूं: कमांड प्रतिस्थापन: इनपुट में अशक्त बाइट को नजरअंदाज कर दिया?


12

मेरे पास एक स्क्रिप्ट है जो चलता है जिसे नोटिफ़िकेशन-भेजने का उपयोग करने की आवश्यकता है, लेकिन रूट के रूप में चलती है। केवल एक चीज जो मुझे मिली, वह है यह स्क्रिप्ट । समस्या यह है कि इस लाइन पर:

DBUS_SESSION=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ | sed -e s/DBUS_SESSION_BUS_ADDRESS=//`

मुझे त्रुटि मिलती रहती है

warning: command substitution: ignored null byte in input

मैं त्रुटि संदेश को कैसे ठीक या दबाऊं?
वैसे निम्नलिखित इसे दबाते नहीं हैं:

2> /dev/null
> /dev/null
>> /dev/null
> /dev/null 2>&1
2>&1

जवाबों:


15

यह चेतावनी बैश-4.4 में एक नई विशेषता प्रतीत होती है - उदाहरण के लिए देखें null बाइट्स के साथ कमांड प्रतिस्थापन चेतावनी उत्पन्न करता है

एक विकल्प यह होगा कि आप अपनी पाइप लाइन जैसे नल बाइट को बंद या परिवर्तित करें

DBUS_SESSION=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ | tr '\0' '\n' | sed -e s/DBUS_SESSION_BUS_ADDRESS=//)

(ध्यान दें कि मैंने $(. . .)backticks के स्थान पर कमांड प्रतिस्थापन के आधुनिक रूप में स्विच किया है )।

वैकल्पिक रूप से, आप बैश शेल के बिलिन readकमांड का उपयोग कर सकते हैं , जो सीधे उदासी से निपटने में सक्षम हो सकता है

IFS== read -d '' _ DBUS_SESSION < <(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ)

( =वर्ण से अलग दो टोकन में नल-सीमांकित grep आउटपुट को विभाजित करें, पहले जंक चर _और दूसरे को असाइन करें DBUS_SESSION)।

[मैं वास्तव में इनका परीक्षण नहीं कर सकता क्योंकि मेरे पास बैश का हालिया संस्करण नहीं है]


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