2016-12-08 12 views
0

몇 가지 텔넷 명령을 자동화하는 매우 간단한 sh 스크립트를 실행하고 있지만 문제가 발생했습니다.sh 스크립트에서 텔넷을 통해 SOH 문자를 보내려면 어떻게해야합니까?

한 명령은 입력 명령 이름 다음에 (CTRL + 를 사용하여 일반적으로 전송)을 SOH 문자를 필요로한다. 이 코드는 작동하지만 작동하지 않습니다.

#!/bin/sh 
(
echo open 12.34.56.78 
sleep 2 
echo -e "\u001""commandname" 
echo -e "\n" 
sleep 3 
echo "quit" 
) | telnet 

내가 뭘 잘못하고 있니? 스크립트를 통해 어떻게 SOH 문자를 보낼 수 있습니까?

+0

'echo -e'는 POSIX 쉘에서 지원하지 않습니다. shebang을'#!/bin/bash'로 바꾸거나'printf'를 사용하십시오. – chepner

답변

1

printf을 사용하십시오.

{ 
    printf "open 12.34.56.78\n" 
    sleep 2 
    printf '\001commandname\n\n' 
    sleep 3 
    printf 'quit\n' 
} | telnet 
+0

내 스크립트의 commandname은 숫자 (300)이며, 입력 값은 [SOH] 300으로되어 있습니다. 그렇다면 예제의 해당 줄에서 구문이 올바른 것입니까? 'printf '\ 1300 \ n \ n'? – Moses

+0

아, 걱정마. 백 슬래시를 피하기 위해'% b'을 잊어 버렸습니다. 그래서 내 경우의 올바른 구문은'\ 1 % b300 \ n \ n'이 될 것입니다. – Moses

+0

제가 그랬듯이 그것을 단순화해서는 안됩니다. 8 진수는 1-3 자리가 될 수 있으므로 모호성을 피하기 위해 제로 패딩은 어떤 상황에서도 좋은 생각이지만 여기서는 필수적입니다. – chepner