带有导出命令和通过 crontab 通知发送的 Shell 脚本不起作用。导出的变量由命令设置

标签 shell cron export

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

为了使其能够与桌面环境通信DBUS_SESSION_BUS_ADDRESS 需要在脚本中设置环境变量。我正在尝试通过以下不起作用的代码来实现此目的。

#!/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 session 地址改变了,所以硬编码不是一个选项。

我做错了什么?

最佳答案

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

$(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"

关于带有导出命令和通过 crontab 通知发送的 Shell 脚本不起作用。导出的变量由命令设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23415117/

相关文章:

Docker:保存 - 不产生输出

linux - 检查 docker-compose 服务是否正在运行

linux - 使用 Shell 脚本提取 1 个月前的数据

excel - 如何在Grails excel-export/apache-POI插件中设置背景颜色?

linux - 测试每周的 cron 作业

php - 在共享服务器上使用 Cron 和 Laravel 会出现此错误,为什么?

database - 一种将结果从 Pig 导出到数据库的方法

python - 从脚本运行交互式 Python 控制台的键盘快捷键损坏

linux - 如何检查 bash 中用户输入的值是否存在?

javascript - 如何在 MySQL 上存储 cron 时间表达式