警告:コマンド置換:入力のnullバイトを無視する方法を修正するにはどうすればよいですか?


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の新機能のようです-たとえば、ヌルバイトを使用したコマンド置換は警告を生成します

1つのオプションは、パイプラインのnullバイトを削除または変換することです。

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

$(. . .)バッククォートの代わりに、コマンド置換の最新の形式に切り替えたことに注意してください)。

あるいは、bashシェルの組み込みreadコマンドを使用することもできます。このコマンドは、null区切り文字を直接処理できます。たとえば、

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

(ヌル区切りのgrep出力を、=文字で区切られた2つのトークンに分割します。1つ目をジャンク変数_に、2つ目をに割り当てますDBUS_SESSION)。

[bashの適切な最新バージョンがないため、これらを実際にテストできませんでした]


tr -d '\0'OK?
コナード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.