私の質問を明確にすることは次のとおりです。

私の質問を明確にすることは次のとおりです。

状態

私たちはさまざまなニーズとテストのためにヘッドレスUbuntu 14.10サーバーを実行しています。/etc/update-motd.d/SSHセッションのMOTDを変更して必要な情報を動的に表示しようとしています。

私が経験している問題は、このディレクトリにスクリプトが含まれていないと、動的データを表示するためにPythonスクリプトを呼び出そうとするほとんどすべての試みが機能しないことです。 「リモート」ファイルを実行できることを認識していますが、出力は表示されません。私はこれを自分で見つけるためにかなり多くのテストを行いましたが、残念です! --成功できませんでした。なぜこれが起こるのか疑問に思います。


私がテストして見つけたすべて

スクリプトのショートカットとして機能するグローバル永続環境変数を作成しました/srv/hack.chat/WOTD$CHATシェルに入力すると、生成された単語が印刷されます。このファイルの内容は毎日動的に削除され、新しいコードで上書きされます。これはamerican-english、引用符を含む単語を辞書から選択するため、\エラーを防ぐためにエスケープ()する必要があるためです。

00-linuxbox私は静的メッセージとASCII "アート"イメージを生成するというファイルにMOTDを変更し始めました。ファイルの末尾ではと呼ばれます/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シェルスクリプトから呼び出されたPythonスクリプトの出力は表示されません。この動作の原因は何ですか?私は本当に知りたいです。

答え1

CHAT変数は、motdスクリプトが実行される環境で定義されていない可能性があります。この変数はシェルプロセスに対してローカルであり、グローバルに設定されません。新しいシェルセッションを開始する場合は、この変数が使用できないことを確認する必要があります。

デフォルトでは、シェルは未定義変数を null に置き換えるため、その行は$CHAT空白として扱われ、何もしません。

#4は、指定されたパスが正しくないため、機能しない可能性があります。 /etc/hack.chat/WOTDでファイルを探していますが、ファイルはそこになく、/srv/hack.chat/WOTDにあります。スクリプトが/etc/hack.chat/WOTDが実行可能かどうかを最初に確認するため、エラーメッセージも表示されませんが、そのパスにファイルがなく、実行しようとしないため、そうではありません。

関連情報