cmd를 실행하기 전에 프롬프트가 나타날 때까지 기다리는 방법은 무엇입니까?

cmd를 실행하기 전에 프롬프트가 나타날 때까지 기다리는 방법은 무엇입니까?

실행할 수 있는 일부 호스트에서 쉘 프롬프트가 나타날 때까지 어떻게 기다릴 수 있습니까(예: bash 스크립트에서?) 그런 ssh user@host echo "test";다음 준비가 되면 로그인하여 echo "test"를 실행합니다. 하지만 매번 발생하지는 않는 것 같습니다. 호스트에서 작업하십시오. 계속하기 전에 기다리 #거나 $메시지가 나타날 때까지 기다리고 싶습니다 echo "test". 어떻게 해야 합니까?

이 작업을 수행할 때 ssh user@host기다렸다가 #수동으로 수행하면 echo "test"예상한 대로 작동합니다. 이것을 스크립트에 어떻게 넣나요? ssh user@host -t echo "test"아니요.

나는 구체적으로 비슷한 작업을 시도했습니다. ssh -o StrictHostKeyChecking=no -p 2222 user@host -t tail -f /var/log/MyFile.log즉, 호스트의 로그 파일을 추적하고 로그 파일을 추적하는 대신 로컬 셸에 결과를 표시했는데 방금 프롬프트가 표시되었습니다.

No entry for terminal type "screen";
using dumb terminal settings.
#

-->메시지를 무시하세요 root. 이 내용은 이 스레드의 일부가 아닙니다. 예, 일반 터미널(xterm)에서 스크린 세션 내에서 실행됩니다 No entry for terminal type "xterm";(예:).

-t내가 그것을 얻지 못하면 로컬 FATAL: not a terminal쉘로 다시 돌아갑니다.

답변1

최후의 수단으로 "expect" 프로그램을 사용할 수 있습니다.

다음은 SSH에서 Expect를 사용하는 방법에 대한 간단한 예입니다.https://www.journaldev.com/1405/expect-script-ssh-example-tutorial

답변2

최근에 이것을 구현한 사람과 방금 이야기를 나눴습니다! 그는 보안상의 이유로(프로덕션 빌드에서 루트 액세스를 비활성화할 수 있도록) 쉘이 다른 로그인 바이너리를 통해 라우팅되기 때문이라고 말합니다. 해결책은 추가 바이너리의 경로를 /etc/passwd다시 쉘 바이너리로 변경하는 것입니다.

관련 정보