Как делают я фиксирую предупреждение: замена команды: проигнорированный пустой байт во входе?

У меня есть сценарий, который работает, который должен использовать, уведомляют - отправляют, но выполнения как корень. Единственная вещь я нашел, что работы являются этим сценарием. Проблема состоит в том что на этой строке:

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
11
задан 17 June 2017 в 22:07

1 ответ

Это предупреждение, кажется, новая возможность в 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 команда, которая может иметь дело с пустыми разделителями непосредственно, например,

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

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

[я не мог действительно протестировать их, поскольку у меня нет соответственно последней версии удара]

14
ответ дан 23 November 2019 в 04:03

Другие вопросы по тегам:

Похожие вопросы: