내 질문을 명확히하는 것은 다음과 같습니다.

내 질문을 명확히하는 것은 다음과 같습니다.

상태

우리는 다양한 요구와 테스트를 위해 헤드리스 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가 실행 가능한지 먼저 확인하기 때문에 오류 메시지도 나타나지 않지만, 해당 경로에 파일이 없고 실행을 시도하지 않기 때문에 그렇지 않습니다.

관련 정보