Як виправити попередження: заміна команди: ігнорується нульовий байт у введенні?


12

У мене є сценарій, який працює, який повинен використовувати notify-send, але працює як root. Єдине, що я виявив, що працює, це цей сценарій . Проблема полягає в тому, що в цьому рядку:

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

Це попередження є новою функцією в Bash-4.4 - див., Наприклад, заміна команди заміною нульових байтів генерує попередження .

Одним із варіантів буде зняття або перетворення нульового байта у вашому трубопроводі, наприклад

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

(зауважте, що я перейшов на сучасну $(. . .)форму заміни команд, замість зворотних посилань).

Крім того, ви можете скористатися вбудованою readкомандою bash shell , яка може безпосередньо працювати з нульовими роздільниками, наприклад

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

(розділіть виведений з нулем розмір grep на два лексеми, розділені =символом; призначте першу змінну непотрібної, _а другу - DBUS_SESSION).

[Я не міг перевірити їх, оскільки у мене немає відповідної останньої версії bash]


Є tr -d '\0'також добре?
Конарда
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.