情况
我们正在运行无头 Ubuntu 14.10 服务器来满足各种需求和测试。我正在尝试通过更改 SSH 会话的 MOTD 来/etc/update-motd.d/
动态显示必要的信息。
我遇到的问题是,除非我将脚本包含在此目录中,否则几乎任何调用 Python 脚本来显示动态数据的尝试都不起作用。它将识别出可以执行“远程”文件,但不显示任何输出。我已经做了相当多的测试来自己解决这个问题,但是——唉! ——没有成功。我很好奇它为什么会这样。
我测试和发现的一切
我创建了一个全局持久环境变量,作为我们脚本的快捷方式/srv/hack.chat/WOTD
。$CHAT
在 shell 中输入将打印出生成的单词。该文件的内容每天都会被动态删除并用新代码覆盖。这只是因为我从american-english
字典中选取包含引号的单词,因此需要转义 ( \
) 来防止错误。
我开始用一个名为的文件更改 MOTD,00-linuxbox
该文件创建了静态消息和 ASCII“艺术”图像。在文件末尾附近它称为/srv/hack.chat/WOTD
.一旦调用该脚本,其余代码00-linuxbox
将被忽略。我尝试了很多不同的方法来让它发挥作用:
# Method 1: Use shortcut. Runs but no output to screen unless manually invoked
$CHAT
# Method 2: Exec. Bad practice. Immediately stops and runs command; remaing code is ignored
exec $CHAT
# Method 3: "Use this, not exec." Does not run at SSH MOTD.
# Works when manually invoked afterwards.
if [ -x "$CHAT" ]; then
$CHAT
fi
# Method 4: Call directly. Always runs but never shows any output, even if manually invoked
if [ -x "/etc/hack.chat/WOTD" ]; then
/etc/hack.chat/WOTD
fi
我确实尝试在单独的 MOTD 文件中调用脚本,看看它的行为是否有任何不同,但行为没有变化。我唯一一次成功的是将脚本克隆到/etc/update-motd.d/
文件夹中。这让我有点困惑。
为了澄清我的问题是:
MOTD 将显示 Python 脚本的任何输出/etc/update-motd.d/
。它不会显示从 MOTD shell 脚本调用的 Python 脚本的任何输出。是什么导致了这种行为?我真的很想知道。
答案1
最有可能的是 CHAT 变量没有在 motd 脚本运行的环境中定义;它是您的 shell 进程本地的,而不是全局设置的。如果启动新的 shell 会话,您应该会观察到该变量不可用。
默认情况下,shell 将未定义的变量替换为空,因此该行$CHAT
被视为空,无操作。
#4 可能不起作用,因为指定的路径不正确:您正在 /etc/hack.chat/WOTD 查找文件,但该文件不在那里,而是在 /srv/hack.chat/WOTD。您甚至没有收到错误消息,因为您的脚本首先检查 /etc/hack.chat/WOTD 是否可执行,但事实并非如此,因为该路径上没有文件,并且不会尝试运行它。