带有export命令和notify send via crontab的Shell脚本不工作。导出的变量由命令设置

带有export命令和notify send via crontab的Shell脚本不工作。导出的变量由命令设置,shell,cron,export,Shell,Cron,Export,我想从cron执行的shell脚本向gnome桌面发送一个通知气泡 要使其能够与桌面环境通信,需要在脚本中设置env变量。我正试图通过下面的代码来实现这一点,但代码不起作用 #!/usr/bin/env sh export DISPLAY=:0 dbus=$(env | grep DBUS_SESSION_BUS_ADDRESS | sed 's/DBUS_SESSION_BUS_ADDRESS=//') export DBUS_SESSION_BUS_ADDRESS=$dbus [...] n

我想从cron执行的shell脚本向gnome桌面发送一个通知气泡

要使其能够与桌面环境通信,需要在脚本中设置env变量。我正试图通过下面的代码来实现这一点,但代码不起作用

#!/usr/bin/env sh
export DISPLAY=:0
dbus=$(env | grep DBUS_SESSION_BUS_ADDRESS | sed 's/DBUS_SESSION_BUS_ADDRESS=//')
export DBUS_SESSION_BUS_ADDRESS=$dbus
[...]
notify-send -u critical "Blah" "Blubb"
当硬编码时,它工作正常

export DBUS_SESSION_BUS_ADDRESS='unix:abstract=/tmp/dbus-HjnsLUTTrn,guid=17c8962443279ebbe24dcd66536278dd'
问题是,dbus会话地址会发生变化,因此硬编码不是一个选项


我做错了什么?

env
当从
cron
运行的脚本调用时,我的框中只设置了以下变量

SHELL=/bin/sh USER=clement PATH=/usr/bin:/bin PWD=/home/clement HOME=/home/clement SHLVL=2 LOGNAME=clement _=/usr/bin/env
因此,grep
in

$(env | grep DBUS_SESSION_BUS_ADDRESS | sed 's/DBUS_SESSION_BUS_ADDRESS=//')
没有给出任何输出。以下几点应该行得通

#!/bin/bash
PID=$(pgrep gnome-session)
dbus=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
export DBUS_SESSION_BUS_ADDRESS=$dbus
notify-send -u critical "Blah" "Blubb"

我通过将
$(env | grep DBUS_SESSION_BUS_ADDRESS | sed's/DBUS_SESSION_BUS_ADDRESS=/')
的结果写入~/'中的一个文件解决了这个问题。使用登录脚本并将其读回
$dbus
。不过你的更优雅。在Ubuntu上用鹦鹉螺取代gnome外壳。