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
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]