2013-03-27 2 views
1

나는 상속 된 쉘 스크립트를 다루고 있으며 전에 보지 못했던 문법을 접했습니다.쉘 스크립트의 세로 막대?

host = 192.[mask] 
port = 2[mask] 

(echo open ${host} ${port} 
    ...about six other commands 
    echo exit) | telnet 

이제 수직 막대까지 의미가 있습니다. 서버에서 명령을 열고 실행하는 명령입니다.

하지만 실제로는 telnet 전화가 무엇입니까? 이 괄호와 술어의 구문은 무엇을 의미합니까? 내 생각에이 말은 텔넷을 연 다음 텔넷에서 다음 명령을 실행한다는 것을 의미하지만 확실하게 알고 싶습니다.

답변

3

괄호 안에는 내부에있는 모든 명령의 출력을 그룹화하여 명령의 입력으로가는 하나의 Unix pipe|으로 그룹화 할 수 있습니다.

는 그러나 괄호는 서브 쉘을 작성하고 당신은 어떤 필요하지 않습니다, 그래서 당신은 할 수 있습니다 :

{ 
    telnet_input_line_1 
    telnet_input_line_2 
    telnet_input_line_3 
    (...) 
} | telnet 

심지어 netcat에 의해 telnet을 대체 할 수있다; 스크립팅 목적으로 설계된 것이 더 좋습니다.

+1

+1 :이 문맥에서 파이프 때문에'{...} '또는'(...)'을 사용할지 여부에 따라 하위 셸이 있습니다. 여러면에서 가장 큰 차이점은 통사론입니다. I/O 리다이렉션의'}'은 명령어가 세미콜론이나 개행 뒤에 나타날 수있는 곳에 나타나야한다. 하위 쉘의')'은 제한이 적습니다. –

3

|은 "열기"텍스트를 telnet에 효과적으로 입력하는 "파이프"입니다. telnet은 일반적으로 키보드에서 입력을 읽지 만 앞의 명령에서 읽습니다.

괄호는 명령을 그룹화하여 모든 결과가 telnet이되도록합니다.