আমি কীভাবে সতর্কতা ঠিক করব: কমান্ড প্রতিস্থাপন: ইনপুটটিতে নাল বাইট উপেক্ষা করা হবে?


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 একটি নতুন বৈশিষ্ট্য উপস্থিত হতে পারে - উদাহরণস্বরূপ দেখুন নাল সঙ্গে বাইট সতর্কবার্তা উত্পন্ন কমান্ড প্রতিকল্পন

একটি বিকল্প হ'ল আপনার পাইপলাইনে নাল বাইট বন্ধ করে ফেলা বা রূপান্তর করা eg

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

(নোট করুন যে আমি $(. . .)ব্যাকটিক্সের জায়গায় কমান্ড সাবস্টিটিউশনের আধুনিক ফর্মটিতে চলেছি)।

বিকল্পভাবে, আপনি ব্যাশ শেলের বিল্টিন readকমান্ডটি ব্যবহার করতে পারেন যা নাল ডিলিমিটরগুলির সাথে সরাসরি ডিল করতে পারে যেমন eg

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

(নাল-সীমাবদ্ধ গ্রেপ আউটপুটটিকে দুটি টোকেনকে =চরিত্র দ্বারা পৃথক করে বিভক্ত করুন ; প্রথমটি জাঙ্ক ভেরিয়েবলের জন্য নির্ধারণ করুন _এবং দ্বিতীয়টিতে DBUS_SESSION) assign

[আমার কাছে বাশের সাম্প্রতিকতম সংস্করণ না থাকায় আমি সত্যিই এগুলি পরীক্ষা করতে পারিনি]


কি tr -d '\0'এছাড়াও ঠিক আছে?
কোনার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.