У меня есть сценарий, который работает, который должен использовать, уведомляют - отправляют, но выполнения как корень. Единственная вещь я нашел, что работы являются этим сценарием. Проблема состоит в том что на этой строке:
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
Это предупреждение, кажется, новая возможность в 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
).
[я не мог действительно протестировать их, поскольку у меня нет соответственно последней версии удара]