ฉันจะแก้ไขคำเตือนได้อย่างไร: การแทนที่คำสั่ง: ละเว้น null byte ในอินพุต


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 ไบต์สร้างเตือน

ทางเลือกหนึ่งคือปลดออกหรือแปลงค่า 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คำสั่งbuiltin ของ bash shell ซึ่งสามารถจัดการกับตัวคั่น null ได้โดยตรงเช่น

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

(แยกเอาต์พุต grep ที่คั่นด้วย null ออกเป็นสองโทเค็นที่คั่นด้วย=อักขระ; กำหนดตัวแปรแรกให้กับตัวแปรขยะ_และตัวที่สองถึงDBUS_SESSION)

[ฉันไม่สามารถทดสอบสิ่งเหล่านี้ได้เพราะฉันไม่มีทุบตีรุ่นล่าสุดที่เหมาะสม]


คือtr -d '\0'ยัง ok?
Konard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.