web-dev-qa-db-fra.com

Comment corriger l'avertissement: substitution de commande: octet nul ignoré en entrée?

J'ai un script qui doit utiliser notify-send, mais s'exécute en tant que root. La seule chose que j'ai trouvée qui fonctionne est ce script . Le problème est que sur cette ligne:

DBUS_SESSION=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ | sed -e s/DBUS_SESSION_BUS_ADDRESS=//`

Je continue à avoir l'erreur

warning: command substitution: ignored null byte in input

Comment puis-je corriger ou supprimer le message d'erreur?
À propos, ne le supprimez pas:

2> /dev/null
> /dev/null
>> /dev/null
> /dev/null 2>&1
2>&1
10
user669400

Cet avertissement semble être une nouvelle fonctionnalité de Bash-4.4 - voir par exemple La substitution de commande avec des octets nuls génère un avertissement .

Une option serait de supprimer ou de convertir l'octet nul dans votre pipeline, par exemple.

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

(notez que je suis passé à la forme moderne de substitution de commande $(. . .), à la place des backticks).

Vous pouvez également utiliser la commande read intégrée du shell bash, qui peut traiter directement les délimiteurs nuls, par exemple.

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

(divisez la sortie grep délimitée par zéro en deux jetons séparés par le caractère =; affectez la première à la variable indésirable _ et la seconde à DBUS_SESSION).

[Je ne pouvais pas vraiment les tester car je n'ai pas de version récente de bash]

11
steeldriver