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


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.