带有导出命令的Shell脚本和通过crontab发送的notify-send无法正常工作。导出的变量由命令设置

时间:2014-05-01 19:32:27

标签: shell cron export

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

为了能够与桌面环境进行通信DBUS_SESSION_BUS_ADDRESS需要在脚本中设置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会话地址发生了变化,所以硬编码不是一个选项。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

envcron运行的脚本调用时,只在我的框中设置了以下变量。

SHELL=/bin/sh USER=clement PATH=/usr/bin:/bin PWD=/home/clement HOME=/home/clement SHLVL=2 LOGNAME=clement _=/usr/bin/env

以及

中的grep
$(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"