为了澄清我的问题是:

为了澄清我的问题是:

情况

我们正在运行无头 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 是否可执行,但事实并非如此,因为该路径上没有文件,并且不会尝试运行它。

相关内容