Skip to main content

Linux / Unix 명령 명령 및 예를 기대하십시오.

Linux - IO Redirection3 : append (유월 2026)

Linux - IO Redirection3 : append (유월 2026)
Anonim

Expect는 스크립트에 따라 다른 대화 형 프로그램과 대화하는 프로그램입니다. 스크립트에 이어 Expect는 프로그램에서 기대할 수있는 것과 올바른 응답이 무엇인지 알고 있습니다. 해석 된 언어는 대화 상자를 지시하는 분기 및 상위 제어 구조를 제공합니다. 또한 사용자는 원할 때 제어 및 대화를 직접 취할 수 있으며 이후에 제어를 스크립트로 되돌립니다.

Expectk은 Expect와 Tk가 혼합 된 것입니다. Expect와 Tk의 소원처럼 행동합니다. Expect는 Tcl없이 C 또는 C ++에서 직접 사용할 수도 있습니다.

"Expect"라는 이름은 uucp, kermit 및 기타 모뎀 제어 프로그램에 의해 대중화 된 send / expect 시퀀스의 아이디어에서 비롯됩니다. 그러나 uucp와 달리 Expect는 모든 프로그램과 작업을 염두에두고 사용자 수준 명령으로 실행될 수 있도록 일반화되어 있습니다. Expect는 동시에 여러 프로그램과 대화 할 수 있습니다.

기대할 수있는 것

예를 들어 expect 명령이 수행 할 수있는 몇 가지 작업은 다음과 같습니다.

  • 통화 요금을 지불하지 않고 로그인 할 수 있도록 컴퓨터에서 다시 전화를 겁니다.
  • 게임을 시작하고 최적의 구성이 나타나지 않을 때까지 반복해서 다시 시작한 다음 컨트롤을 사용자에게 넘깁니다.
  • fsck를 실행하고 질문에 대한 대답으로 "예"또는 "아니오"로 대답하거나 사전에 지정된 기준에 따라 제어를 다시 제공하십시오.
  • 다른 네트워크에 연결하고 자동으로 메일을 검색하여 처음에 로컬 시스템에 보낸 것처럼 보이게하십시오.
  • rlogin, telnet, tip, su 또는 chgrp에 걸쳐 환경 변수, 현재 디렉토리 또는 모든 종류의 정보를 포함하십시오.

셸이 이러한 작업을 수행 할 수없는 다양한 이유가 있습니다. 모두 Expect로 가능합니다.

일반적으로 Expect는 프로그램과 사용자 간의 상호 작용이 필요한 프로그램을 실행하는 데 유용합니다. 필요한 것은 상호 작용이 프로그램 적으로 특성화 될 수 있다는 것입니다. Expect는 제어중인 프로그램을 중단하지 않고 사용자에게 제어 권한을 다시 제공 할 수도 있습니다. 마찬가지로 사용자는 언제든지 스크립트에 제어권을 반환 할 수 있습니다.

용법

Expect는 실행할 명령 목록에 대해 cmdfile을 읽습니다. Expect는 #!를 지원하는 시스템에서 암시 적으로 호출 될 수 있습니다. 스크립트를 실행 파일로 표시하고 스크립트의 첫 번째 줄을 작성하여 표기법을 사용합니다.

#! / usr / local / bin / expect -f

물론, 경로는 Expect가 사는 곳을 정확히 설명해야합니다. / usr / local / bin은 예제 일뿐입니다.

-c 플래그는 스크립트에서 앞에 실행될 명령 앞에 붙습니다. 쉘에 의해 분할되지 않도록 명령을 인용해야합니다. 이 옵션은 여러 번 사용할 수 있습니다. 여러 명령은 세미콜론으로 구분하여 단일 -c로 실행할 수 있습니다. 명령은 나타나는 순서대로 실행됩니다. Expectk을 사용할 때이 옵션은 -command로 지정됩니다.

-d 플래그는 expect 및 상호 작용과 같은 명령의 내부 활동을보고하는 일부 진단 출력을 사용 가능하게합니다. 이 플래그는 Expect 스크립트 시작 부분의 "exp_internal 1"과 동일한 효과를 가지며 Expect 버전이 인쇄됩니다.

-D 플래그는 대화식 디버거를 사용 가능하게합니다. 정수 값이 와야합니다. 디버거는 값이 0이 아니거나 ^ C를 누르거나 중단 점에 도달하거나 다른 적절한 디버거 명령이 스크립트에 나타나는 경우 다음 Tcl 프로 시저보다 먼저 제어를받습니다. Expectk을 사용할 때이 옵션은 다음과 같이 지정됩니다. -디버그.

-f 플래그는 명령을 읽을 파일을 선행합니다. #!를 사용할 때만 유용하기 때문에 플래그 자체는 선택 사항입니다. 표기법을 사용하여 다른 인수를 명령 행에 제공 할 수 있습니다. Expectk을 사용할 때이 옵션은 -file로 지정됩니다.

기본적으로 명령 파일은 메모리로 읽어지고 전체에서 실행됩니다. 때때로 한 번에 한 행씩 파일을 읽는 것이 바람직합니다. 임의의 파일을이 방식으로 강제 처리하려면 -b 플래그를 사용하십시오. Expectk을 사용할 때이 옵션은 -buffer로 지정됩니다.

"-"문자열이 파일 이름으로 제공되면 표준 입력이 대신 읽혀집니다. "./-"를 사용하여 실제로 "-"라는 파일에서 읽습니다.

-i 플래그는 Expect가 대화식으로 파일에서 명령을 읽는 대신 명령을 프롬프트하도록합니다. 프롬프트는 종료 명령 또는 EOF를 통해 종료됩니다. -i 플래그는 명령 파일이나 -c가 사용되지 않는 것으로 가정됩니다. Expectk을 사용할 때이 옵션은 -interactive로 지정됩니다.

- 옵션의 끝을 구분하는 데 사용할 수 있습니다. 이것은 Expect가 해석하지 않고 옵션과 유사한 인수를 스크립트에 전달하려는 경우에 유용합니다. 이것은 유용하게 #! Expect에 의한 깃발 같은 해석을 막기위한 라인. 예를 들어, 다음은 변수에 스크립트 이름을 포함하여 원래 인수를 남겨 둡니다. argv .

#! / usr / local / bin / expect -

#! 인수를 추가 할 때 일반적인 getopt (3) 및 execve (2) 규칙을 준수해야합니다. 선.

$ exp_library / expect.rc 파일은 -N 플래그가 사용되지 않는 한 자동으로 소스됩니다. (Expectk을 사용하는 경우이 옵션은 -NORC로 지정됩니다.) -n 플래그가 사용되지 않는 한 바로 다음에 ~ / .expect.rc 파일이 자동으로 소스됩니다. DOTDIR 환경 변수가 정의되면 디렉토리로 취급되고 .expect.rc가 거기에서 읽혀집니다. Expectk을 사용할 때이 옵션은 -norc로 지정됩니다.이 소싱은 -c 플래그를 실행 한 후에 만 ​​발생합니다.

-v Expect가 버전 번호를 출력하고 종료하도록합니다. 긴 플래그 이름을 사용하는 Expectk의 해당 플래그는 -version입니다.

선택적 args는 목록으로 만들어지고 argv 및 arg라는 변수에 저장됩니다. argc는 argv의 길이로 초기화됩니다.

Argv0은 스크립트가 사용되지 않으면 스크립트 또는 2 진의 이름으로 정의됩니다. 예를 들어, 다음은 스크립트 이름과 처음 세 인수를 출력합니다.

send_user "$ argv0 lrange $ argv 0 2 n"

명령들

Expect는 Tool Command Language를 사용합니다. Tcl은 제어 흐름 (if, for, break), 표현식 평가 및 재귀 및 프로 시저 정의와 같은 여러 가지 기능을 제공합니다. 여기에 사용되었지만 정의되지 않은 명령 (set, if, exec)은 Tcl 명령입니다. Expect는 추가 명령을 지원합니다. 달리 지정하지 않는 한 명령은 빈 문자열을 반환합니다.

명령은 빨리 찾을 수 있도록 사전 순으로 나열됩니다. 그러나 새 사용자는 스폰, 보내기, 예상 및 상호 작용의 설명을 순서대로 읽는 것으로 시작하기가 쉽습니다.

닫기 -slave -onexec 0 | 1 -i spawn_id

현재 프로세스에 대한 연결을 닫습니다. 대부분의 대화 형 프로그램은 표준 및 종료시 EOF를 감지합니다. 그러므로 닫기 대개 프로세스를 죽이기에는 충분합니다. -i 플래그는 명명 된 spawn_id에 해당하는 프로세스를 닫을 것을 선언합니다.

기대와 상호 작용 모두 현재 프로세스가 종료되고 암시 적으로 close를 감지하지만, "exec kill $ pid"로 프로세스를 종료하면 명시 적으로 close를 호출해야합니다.

-onexec 플래그는 새로운 생성 된 프로세스에서 스폰 ID가 닫히는 지 또는 프로세스가 오버레이되는지 여부를 결정합니다. 생성 ID를 열어 두려면 0 값을 사용하십시오. 0이 아닌 정수 값은 새 프로세스에서 생성을 강제로 닫습니다.

-slave 플래그는 spawn id와 연결된 슬레이브를 닫습니다. 연결이 닫히면, 슬레이브는 여전히 열려 있으면 자동으로 닫힙니다.

연결이 암시 적으로 또는 명시 적으로 닫혀 있는지 여부에 관계없이 wait을 호출하여 해당 커널 프로세스 슬롯을 지워야합니다. close 명령은 프로세스 연결을 닫으면 종료 될 것이라는 보장이 없기 때문에 wait를 호출하지 않습니다.

debug -now 0 | 1

명령문을 단계별로 실행하고 중단 점을 설정할 수있는 Tcl 디버거를 제어합니다.

인수가 없으면 디버거가 실행 중이 아니면 1이 반환되고 그렇지 않으면 0이 반환됩니다.

인수가 1 인 경우 디버거가 시작됩니다. 인수가 0이면 디버거가 중지됩니다. 1 개의 인수 앞에 -now 플래그가 있으면 디버거가 즉시 시작됩니다. 그렇지 않으면 디버거가 다음 Tcl 문으로 시작됩니다.

debug 명령은 트랩을 변경하지 않습니다. 이것을 -D 플래그로 Expect를 시작하는 것과 비교하십시오.

disconnect 명령은 분기 된 프로세스를 터미널에서 연결 해제합니다. 백그라운드에서 계속 실행됩니다. 프로세스에 자체 프로세스 그룹이 제공됩니다. 표준 I / O는 / dev / null로 리디렉션됩니다.

다음 단편은 disconnect를 사용하여 백그라운드에서 스크립트를 계속 실행합니다.

if {fork! = 0} 종료 연결 해제. . .

다음 스크립트는 암호를 읽고 실행될 때마다 암호를 요구하는 매 시간마다 프로그램을 실행합니다. 스크립트는 암호를 제공하므로 한 번만 입력하면됩니다.

{{fork $!} = 0} {sleep 3600; continue} 스폰 연결 끊기 priv_prog expect 암호 : "$ expect_out을 보내십시오. (send_user" 1, 문자열) r ". . . exit}

셸 비동기 프로세스 기능 (&)을 통한 연결 끊기의 장점은 연결 해제 전에 터미널 매개 변수를 저장 한 다음 나중에 새 ptys에 적용 할 수 있다는 것입니다. Expect는 Expect가 제어를받을 때까지 이미 터미널의 연결이 끊어져 있으므로 터미널의 매개 변수를 읽을 기회가 없습니다.

exit -opts 상태

Expect가 종료되거나 그렇지 않으면 그렇게 할 준비를합니다.

그만큼 혼자만의 플래그는 다음 인수가 종료 핸들러로 사용되도록합니다. 인수가 없으면 현재 종료 핸들러가 리턴됩니다.

그만큼 - 아니오 깃발 원인 배고 있다 종료 준비를하지만 실제로 운영 체제로 제어를 반환하지는 않습니다. 사용자 정의 exit 처리기는 Expect 자체 내부 처리기와 마찬가지로 실행됩니다. 더 이상의 Expect 명령을 실행해서는 안됩니다. Expect를 다른 Tcl 확장과 함께 실행하는 경우에 유용합니다. 현재의 인터프리터 (및 Tk 환경의 경우 기본 윈도우)는 다른 Tcl 확장이 정리할 수 있도록 남아 있습니다. Expect 's 출구 다시 호출됩니다 (그러나 이것이 발생할 수 있음). 핸들러가 재실행되지 않습니다.

종료하면 스폰 된 프로세스에 대한 모든 연결이 닫힙니다. 폐쇄는 생성 된 프로세스에 의해 EOF로 탐지됩니다. 출구 정상적인 _exit (2) 프로 시저가 수행하는 것 이상의 다른 작업은 수행하지 않습니다. 따라서 EOF를 확인하지 않는 생성 된 프로세스는 계속 실행될 수 있습니다. (스폰 된 프로세스가 보내질 신호를 결정하는 데 다양한 조건이 중요하지만, 이는 exit (3) 아래에 일반적으로 문서화되어 있습니다.) 계속 실행되는 생성 된 프로세스는 init에 의해 상속됩니다.

지위 (지정되지 않았 으면 0)이 종료 상태로 반환됩니다. 배고 있다 . 출구 스크립트의 끝에 도달하면 내재적으로 실행됩니다.

exp_continue -continue_timer

명령 exp_continue 허락하다 배고 있다 평상시처럼 돌아 오는 것이 아니라 실행을 계속할 수 있습니다. 기본적으로 exp_continue 타임 아웃 타이머를 재설정합니다. 그만큼 -continue_timer 플래그는 타이머가 다시 시작되는 것을 방지합니다. (만나다 배고 있다 자세한 내용은.)

exp_internal -f 파일 값

내부에 진단 정보를 보내는 추가 명령을 발생시킵니다. 배고 있다 if stderr if 값 0이 아닙니다. 이 출력은 값 진단 정보는 수신 된 모든 문자와 현재 출력을 패턴과 일치시키려는 모든 시도를 포함합니다.

선택 사항 파일 이 제공되면 모든 정상 및 디버깅 출력이 해당 파일에 기록됩니다 ( 값 ). 이전 진단 출력 파일이 닫힙니다.

그만큼 -info flag는 exp_internal이 주어진 가장 최근의 비 정보 인수에 대한 설명을 반환하도록합니다.

exp_open args -i spawn_id

원래 스폰 ID에 해당하는 Tcl 파일 식별자를 반환합니다. 파일 식별자는 Tcl에 의해 열리는 것처럼 사용될 수 있습니다. 열다 명령. (스폰 ID는 더 이상 사용되지 않아야합니다. 기다림 실행해서는 안됩니다.

그만큼 -leaveopen 플래그는 Expected 명령을 통해 액세스하기 위해 스폰 ID를 열어 둡니다. 에이 기다림 스폰 ID에서 실행해야합니다.

exp_pid -i spawn_id

현재 생성 된 프로세스에 해당하는 프로세스 ID를 반환합니다. 만약 -나는 플래그가 사용되면 반환 된 PID는 지정된 스폰 ID의 PID와 일치합니다.

exp_send

에 대한 별칭입니다. 보내다 .

exp_send_error

에 대한 별칭입니다. send_error .

exp_send_log

에 대한 별칭입니다. send_log .

exp_send_tty

에 대한 별칭입니다. send_tty .

exp_send_user

에 대한 별칭입니다. send_user .

exp_version -exit 버전

스크립트가 현재 버전의 Expect와 호환되는지 확인하는 데 유용합니다.

인수없이 현재 버전의 배고 있다 반환됩니다. 이 버전은 스크립트에 인코딩 될 수 있습니다. 최신 버전의 기능을 사용하고 있지 않다는 것을 알고 있다면 이전 버전을 지정할 수 있습니다.

버전은 점으로 구분 된 세 개의 숫자로 구성됩니다. 첫 번째는 주요 번호입니다. 버전 용으로 작성된 스크립트 배고 있다 다른 메이저 번호로는 거의 확실하게 작동하지 않을 것입니다. exp_version 주 번호가 일치하지 않으면 오류를 반환합니다.

두 번째는 부 번호입니다. 현재 버전보다 큰 부 번호가있는 버전 용으로 작성된 스크립트는 새로운 기능에 따라 달라질 수 있으며 실행되지 않을 수 있습니다. exp_version 주요 번호가 일치하지만 스크립트 부 번호가 실행중인 번호보다 큰 경우 오류를 반환합니다. 배고 있다 .

세 번째는 버전 비교에서 아무런 역할을하지 않는 숫자입니다. 그러나, 배고 있다 소프트웨어 배포는 추가 문서 나 최적화와 같이 어떤 식 으로든 변경됩니다. 새 마이너 버전이 나올 때마다 0으로 재설정됩니다.

와 더불어 -출구 깃발, 배고 있다 버전이 만료 된 경우 오류를 인쇄하고 종료합니다.

-opts pat1 body1 … -opts patn bodyn

패턴 중 하나가 스폰 된 프로세스의 출력과 일치하거나, ​​지정된 시간이 지났거나, 파일 끝 (end-of-file)이 표시 될 때까지 대기합니다. 최종 본문이 비어 있으면 생략 될 수 있습니다.

가장 최근의 패턴 expect_before 명령은 다른 패턴보다 먼저 내재적으로 사용됩니다. 가장 최근의 패턴 expect_after 명령은 암시 적으로 다른 패턴 다음에 사용됩니다.

전체에 대한 논증 배고 있다 명령문이 한 줄 이상 필요하다면 모든 인수는 백 슬래시로 각 줄을 끝내지 않도록 하나의 줄에 "예"할 수 있습니다. 이 경우, 중괄호에도 불구하고 일반적인 Tcl 대체가 발생합니다.

패턴이 키워드 인 경우 eof 해당 본문은 파일 끝에서 실행됩니다. 패턴이 키워드 인 경우 타임 아웃 , 대응하는 본문은 타임 아웃시에 실행됩니다. timeout 키워드를 사용하지 않으면, 시간 초과시 암시 적 널 (null) 조치가 실행됩니다. 기본 제한 시간은 10 초이지만 "set timeout 30"명령을 사용하여 30으로 설정할 수 있습니다. 무한 타임 아웃은 값 -1로 지정 될 수 있습니다. 패턴이 키워드 인 경우 태만 , 해당 본문은 시간 종료 또는 파일 끝에서 실행됩니다.

패턴이 일치하면 해당 본문이 실행됩니다. 배고 있다 본문의 결과를 반환합니다 (패턴이 일치하지 않으면 빈 문자열). 여러 패턴이 일치하는 경우, 먼저 나타나는 패턴이 본문을 선택하는 데 사용됩니다.

새로운 산출물이 도착할 때마다, 나열된 순서대로 각 패턴과 비교됩니다. 따라서 프롬프트와 같이 마지막 패턴이 표시되도록 보장하여 일치가 없는지 테스트 할 수 있습니다. 프롬프트가 표시되지 않는 상황에서는 다음을 사용해야합니다. 타임 아웃 (수동으로 상호 작용하는 경우처럼).

패턴은 세 가지 방법으로 지정됩니다. 기본적으로 패턴은 Tcl로 지정됩니다. 문자열 일치 명령. (이러한 패턴은 일반적으로 "glob"패턴이라고도하는 C 셸 정규 표현식과 유사합니다.) 그만큼 -gl 플래그는 그렇지 않으면 일치 할 수있는 패턴을 보호하기 위해 사용될 수 있습니다 배고 있다 그렇게하는 것으로부터의 플래그. "-"로 시작하는 패턴은이 f}으로 보호되어야합니다. ( "-"로 시작하는 모든 문자열은 이후 옵션을 위해 예약되어 있습니다.)

예를 들어 다음 조각은 로그인 성공 여부를 찾습니다. (참고 중단하다 스크립트의 다른 곳에서 정의 된 절차로 간주됩니다.)

기대 {busy {busys n; exp_continue} 중단 "잘못된 암호"abort timeout abort connected}

따옴표는 네 번째 패턴에 필요하며, 그렇지 않으면 패턴을 액션과 분리 할 수있는 공백이 있기 때문입니다.동일한 작업 (예 : 3 및 4)이있는 패턴은 작업을 다시 나열해야합니다. 이것은 regexp-style 패턴을 사용함으로써 피할 수 있습니다 (아래 참조). glob 스타일 패턴 형성에 대한 더 자세한 정보는 Tcl 매뉴얼에서 찾을 수 있습니다.

Regexp 스타일의 패턴은 Tcl의 구문에 따른다. 정규식 ( "정규식"의 줄임말) 명령. 정규 표현식 패턴이 플래그와 함께 도입되었습니다. -레 . 이전 예제는 regexp를 다음과 같이 사용하여 다시 작성할 수 있습니다.

기대 {busy {busys n; exp_continue} -re "잘못된 암호가 잘못되었습니다"abort timeout abort connected}

두 유형의 패턴은 모두 "분리되지 않은"패턴입니다. 즉, 패턴은 전체 문자열과 일치 할 필요는 없지만 문자열의 모든 부분이 시작되고 끝날 수 있습니다 (그 밖의 모든 것이 일치하는 한). ^를 사용하여 문자열의 시작 부분과 일치시키고 $를 사용하여 끝 부분과 일치시킵니다. 문자열의 끝을 기다리지 않으면 문자열이 생성 된 프로세스에서 반향됨에 따라 응답이 문자열 중간에 쉽게 끝날 수 있습니다. 여전히 정확한 결과를 산출하는 동안 출력은 부 자연스럽게 보일 수 있습니다. 따라서 문자열 끝에 정확하게 문자를 기술 할 수 있다면 $를 사용하는 것이 좋습니다.

많은 편집자에서 ^와 $는 각각 줄의 시작과 끝과 일치한다는 것을 기억하십시오. 그러나 expect가 줄 중심이 아니기 때문에이 문자는 현재 예상 일치 버퍼에있는 데이터의 시작과 끝 (줄과 반대)과 일치합니다. (또한, "시스템 소화 불량"에 대한 아래주의 사항 참조)

그만큼 -전의 플래그는 패턴을 "정확한"문자열로 일치시킵니다. *, ^ 등은 해석되지 않습니다 (보통 Tcl 규칙을 준수해야합니다). 정확한 패턴은 항상 고정되어 있습니다.

그만큼 -nocase 플래그는 소문자 인 것처럼 출력의 대문자를 비교합니다. 패턴은 영향을받지 않습니다.

출력을 읽는 동안 2000 바이트가 넘으면 이전 바이트를 강제로 "잊어 버릴"수 있습니다. 함수로 변경 될 수 있습니다. match_max . (지나치게 큰 값은 패턴 일치를 느리게 할 수 있습니다.) 팻말 ~이다. full_buffer , 해당하는 본문은 if match_max 바이트가 수신되었고 다른 패턴은 일치하지 않습니다. 여부 full_buffer 키워드가 사용되면 잊어 버린 문자가 expect_out (버퍼)에 기록됩니다.

만약 팻말 키워드입니다. 없는 , null은 허용됩니다 ( remove_nulls 명령), 단일 ASCII 0이 일치하면 해당 본문이 실행됩니다. glob 또는 regexp 패턴을 통해 0 바이트를 일치시키는 것은 불가능합니다.

패턴 (또는 eof 또는 full_buffer)을 일치 시키면 일치하는 이전에는 일치하지 않는 출력이 변수에 저장됩니다 expect_out (버퍼) . 최대 9 개의 정규 표현식 문자열 일치가 변수에 저장됩니다. expect_out (1, string) …을 통하여 expect_out (9, 문자열) . 만약 -지수 플래그는 패턴 앞에 사용되며 시작 및 종료 인덱스 ( 이상한 )는 변수에 저장됩니다 expect_out (X, 시작) 과 expect_out (X, 끝) 여기서 X는 자릿수이며 버퍼의 부분 문자열 위치에 해당합니다. 0은 전체 패턴과 일치하고 glob 패턴과 regexp 패턴에 대해 생성 된 문자열을 나타냅니다. 예를 들어 프로세스가 "abcdefgh n"의 결과를 생성 한 경우 다음 결과가 반환됩니다.

기대 "cd"

마치 다음 문장이 실행 된 것과 같습니다 :

set expect_out (0, string) cd 세트 expect_out (버퍼) abcd

및 "efgh n"출력 버퍼에 남아 있습니다. 프로세스가 "abbbcabkkkka n"출력을 생성 한 경우, 결과는 다음과 같습니다.

기대 -indices -re "b (b *). * (k +)"

마치 다음 문장이 실행 된 것과 같습니다 :

(1, 문자열) 3 expect_out (1, 문자열) 3 세트 expect_out (0, 시작) 1 세트 expect_out (0, 끝) 1 세트 expect_out (0, 끝) 10 세트 expect_out (0, 문자열) bbbcabkkkk 세트 expect_out (2, 시작) 10 세트 expect_out (2, 끝) 10 세트 expect_out (2, string) k 세트 expect_out (버퍼) abbbcabkkkk

및 "a n"출력 버퍼에 남아 있습니다. "*"(및 -re ". *") 패턴은 프로세스의 출력을 더 이상 읽지 않고 출력 버퍼를 비 웁니다.

일반적으로 일치하는 출력은 Expect의 내부 버퍼에서 삭제됩니다. 패턴 앞에 접두사를 붙이면 - 비 이송 깃발. 이 플래그는 실험에 특히 유용합니다 (실험 중에는 편의상 "-not"으로 줄여 쓸 수 있습니다).

일치하는 출력 (또는 eof 또는 full_buffer)과 연관된 스폰 ID는 expect_out (spawn_id) .

그만큼 - 시간 초과 플래그는 현재 expect 명령이 timeout 변수 값을 사용하는 대신 시간 초과 값으로 다음 값을 사용하게합니다.

기본적으로 패턴은 현재 프로세스의 출력과 일치하지만, -나는 플래그는 명명 된 spawn_id 목록의 출력이 다음 패턴과 일치한다고 선언합니다 (다음 -나는 ). spawn_id 목록은 공백으로 구분 된 spawn_ids 목록이거나 spawn_ids 목록을 나타내는 변수 여야합니다.

예를 들어, 다음 예제는 현재 프로세스에서 "connected"또는 $ proc2에서 명명 한 spawn_id에서 "busy", "failed"또는 "invalid password"를 기다립니다.

{-i $ proc2 busy {puts busy n; exp_continue} -re "잘못된 암호가 잘못되었습니다"abort timeout abort connected}

전역 변수의 값 any_spawn_id 다른 모든 이름으로 명명 된 모든 spawn_ids에 패턴을 일치시키는 데 사용될 수 있습니다. -나는 현재의 깃발 배고 있다 명령. 에서 spawn_id -나는 연관된 패턴이없는 플래그 (즉, 바로 다른 패턴이 뒤 따른 패턴) -나는 )는 동일한 패턴의 다른 패턴에서도 사용할 수 있습니다. 배고 있다 명령과 관련된 any_spawn_id.

그만큼 -나는 플래그는 전역 변수의 이름을 지정할 수도 있습니다.이 경우 변수는 스폰 ID 목록에 대해 읽혀집니다. 변수는 변경 될 때마다 다시 읽 힙니다. 이는 명령이 실행되는 동안 I / O 소스를 변경하는 방법을 제공합니다. 이런 식으로 제공된 스폰 ID는 "간접적 인"스폰 ID라고합니다.

다음과 같은 작업 단절잇다 제어 구조 (즉, …에 대한 , proc ) 일반적인 방식으로 행동합니다. 명령 exp_continue 허락하다 배고 있다 평상시처럼 돌아 오는 것이 아니라 실행을 계속할 수 있습니다.

이는 명시 적 루프 또는 반복되는 expect 문을 피할 때 유용합니다. 다음 예제는 rlogin을 자동화하는 단편의 일부입니다. 그만큼 exp_continue 두 번째 쓰지 않아도된다. 배고 있다 rlogin에서 암호를 묻는 프롬프트가 표시되면 명령문 (프롬프트를 다시 찾으려면)을 누르십시오.

$ host에 "{stty -echo send_user"비밀번호 (stty -echo send_user) 패스워드를 입력하십시오 : "expect_user -re"(. *) n "send_user" n "expect"$ expect_out (1, string) r "stty 호스트에 대한 연결에 실패했습니다 : $ expect_out (버퍼) "종료} - 호스트에 대한 연결이 실패했습니다. n" re $ prompt}

예를 들어, 다음 부분은 사용자가 이미 완전히 자동화 된 상호 작용을 안내하는 데 도움이 될 수 있습니다. 이 경우 터미널은 원시 모드로 전환됩니다. 사용자가 "+"를 누르면 변수가 증가합니다. "p"를 누르면 몇 가지 리턴이 프로세스로 전송되어 어떤 식 으로든이를 찔러 넣을 수 있습니다. "i"는 사용자가 프로세스와 상호 작용하도록하여 스크립트에서 효과적으로 제어권을 훔칩니다. 각각의 경우에 exp_continue 전류를 허용한다. 배고 있다 현재 작업을 실행 한 후 패턴 일치를 계속합니다.

stty raw -echo expect_after {-i $ user_spawn_id "p"{ " r r r"; exp_continue} "+"{incr foo; exp_continue} "i"{상호 작용; exp_continue} "종료"종료}

기본적으로, exp_continue 타임 아웃 타이머를 재설정합니다. 타이머가 다시 시작되지 않습니다. exp_continue 와 함께 호출됩니다. -continue_timer 깃발.

expect_after expect_args

expect_before 단 두 패턴의 패턴 배고 있다expect_after 일치 할 수 있습니다. 배고 있다 패턴이 사용됩니다. 자세한 내용은 expect_before 명령을 사용하십시오.

expect_background expect_args

같은 주장을한다.배고 있다 그러나 즉시 반환됩니다. 새 입력이 도착할 때마다 패턴이 테스트됩니다. 패턴타임 아웃태만 의미가 없다.expect_background 조용히 버려집니다. 그렇지 않으면,expect_background 명령 사용expect_beforeexpect_after 똑같은 패턴배고 있다 않습니다.

언제expect_background 액션이 평가되는 동안 동일한 스폰 ID에 대한 백그라운드 처리가 차단됩니다. 작업이 완료되면 백그라운드 처리가 차단 해제됩니다. 백그라운드 처리가 차단되는 동안, (전경)배고 있다 동일한 스폰 ID에

실행이 불가능합니다.배고 있다 동안expect_background 차단 해제되었습니다.expect_background 특정 스폰의 id는 동일한 스폰 ID로 새로운 expect_background를 선언하여 삭제됩니다. 선언expect_background 패턴이없는 경우 배경에 패턴을 일치시키는 기능에서 제공된 스폰 ID를 제거합니다.

expect_before expect_args

같은 주장을한다.배고 있다 그러나 즉시 반환됩니다. 가장 최근의 패턴 - 액션 쌍expect_before 동일한 스폰 ID가있는 모든 항목은 다음에 암시 적으로 추가됩니다.배고 있다 명령. 패턴이 일치하면 패턴에 지정된 것처럼 처리됩니다.배고 있다 명령 자체와 관련된 본문은배고 있다 명령. 두 패턴 모두에서expect_before배고 있다 일치 할 수 있습니다.expect_before 패턴이 사용됩니다.

패턴을 지정하지 않으면 모든 패턴에 대해 스폰 ID가 확인되지 않습니다.

에 의해 재정의되지 않는 한-나는 깃발,expect_before 패턴은 해당 시간에 정의 된 스폰 ID와 일치합니다.expect_before 명령이 실행되었습니다 (패턴이 일치 할 때가 아님).

-info 플래그로 인해expect_before 일치시킬 패턴의 현재 스펙을 리턴합니다. 기본적으로 현재 스폰 ID를보고합니다. 선택적인 spawn id 지정은 그 spawn id에 대한 정보를 제공 할 수 있습니다. 예를 들어

expect_before -info -i $ proc

많아야 하나의 spawn id 명세가 주어질 수있다. 플래그 -indirect는 간접 지정에서만 오는 직접 스폰 ID를 표시하지 않습니다.

스폰 ID 사양 대신 "-all"플래그는 "-info"가 모든 스폰 ID에 대해보고하도록합니다.

-info 플래그의 출력은 expect_before에 대한 인수로 다시 사용될 수 있습니다.

expect_tty expect_args

처럼배고 있다 하지만 / dev / tty (즉, 사용자의 키 스트로크)에서 문자를 읽습니다. 기본적으로 읽기는 조리 모드로 수행됩니다. 따라서 라인은 다음과 같은 순서로 return으로 끝나야합니다.배고 있다 그들을 만나러. 을 통해 변경 될 수 있습니다.stty (stty 아래 명령 참조).

expect_user expect_args

처럼배고 있다 그러나 그것은 표준 입력으로부터 문자를 읽는다 (즉, 사용자로부터의 키 스트로크). 기본적으로 읽기는 조리 모드로 수행됩니다. 따라서 라인은 다음과 같은 순서로 return으로 끝나야합니다.배고 있다 그들을 만나러.을 통해 변경 될 수 있습니다.stty (stty 아래 명령 참조).

포크

새로운 프로세스를 만듭니다. 새로운 프로세스는 현재의 정확한 복사본입니다.배고 있다 방법. 성공에,포크 새로운 (자식) 프로세스에 0을 반환하고 자식 프로세스의 프로세스 ID를 부모 프로세스에 반환합니다. 실패하면 (특히 스왑 공간, 메모리 등의 리소스 부족으로 인해),포크 부모 프로세스에 -1을 반환하고 자식 프로세스가 생성되지 않습니다.

포크 된 프로세스는출구 명령, 원래 프로세스처럼. 포크 된 프로세스는 로그 파일에 쓸 수 있습니다. 대부분의 프로세스에서 디버깅이나 로깅을 비활성화하지 않으면 결과가 혼란 스러울 수 있습니다.

일부 pty 구현은 여러 독자와 작성자가 잠시라도 혼란 스러울 수 있습니다. 따라서 가장 안전한 방법은포크 산란 과정 전에.

상호 작용 string1 body1 … stringn bodyn

현재 프로세스를 사용자에게 제어하여 키 입력을 현재 프로세스로 보내고 현재 프로세스의 stdout 및 stderr을 리턴합니다.

문자열 - 본문 쌍을 인수로 지정할 수 있습니다.이 경우 해당 문자열이 입력 될 때 본문이 실행됩니다. 기본적으로 문자열은 현재 프로세스로 보내지지 않습니다.통역사 명령은 최종 본문이없는 경우 가정됩니다.

전체에 대한 논증상호 작용하다 명령문이 한 줄 이상 필요하다면 모든 인수는 백 슬래시로 각 줄을 끝내지 않도록 하나의 줄에 "예"할 수 있습니다. 이 경우, 중괄호에도 불구하고 일반적인 Tcl 대체가 발생합니다.

예를 들어 다음 명령 실행은 정의 된 다음 문자열 - 본 쌍과 상호 작용합니다. ^ Z를 누르면,배고 있다 일시 중지되었습니다. (그만큼-다시 놓기 플래그는 터미널 모드를 복원합니다.) ^ A를 누르면 사용자는 "사용자가 A 제어 입력"을보고 프로세스에 ^ A가 전송됩니다. $를 누르면 사용자에게 날짜가 표시됩니다. ^ C를 누르면,배고 있다 종료. "foo"가 입력되면 사용자는 "bar"를 보게됩니다. ~~을 누르면,배고 있다 인터프리터는 대화식으로 실행됩니다.

set CTRLZ 032 interact {-reset $ CTRLZ {exec kill -STOP pid} 001 {send_user "당신이 입력 한 컨트롤 -A n"; $ {send_user "날짜는 시계 형식 시계 초입니다."} 003 exit foo {send_user "bar"} ~~}

문자열 - 본문 쌍에서 문자열은 인수로 나열된 순서대로 일치합니다. 부분적으로 일치하는 문자열은 나머지가 오기를 예상하여 현재 프로세스로 보내지지 않습니다. 문자가 더 이상 일치하지 않을 수 있도록 입력되면 문자열의 일부만이 다른 일치를 시작할 수없는 프로세스로 전송됩니다. 따라서 부분적으로 일치하는 부분 문자열 인 문자열은 나중에 일치하려고하는 원래 문자열이 실패 할 경우 나중에 일치 할 수 있습니다.

기본적으로 문자열 일치는 와일드 카드가없는 것과 같습니다. (대조적으로,배고 있다 명령은 기본적으로 glob 스타일의 패턴을 사용합니다.)-전의 플래그는 다른 경우 일치 할 수있는 패턴을 보호하는 데 사용될 수 있습니다상호 작용하다 그렇게하는 것으로부터의 플래그. "-"로 시작하는 패턴은이 f}으로 보호되어야합니다. ( "-"로 시작하는 모든 문자열은 이후 옵션을 위해 예약되어 있습니다.)

그만큼-레 플래그는 문자열을 정규 표현식 스타일 패턴으로 해석하도록합니다. 이 경우 일치하는 부분 문자열이 변수에 저장됩니다 interact_out 길과 비슷하게배고 있다 출력을 변수에 저장합니다.expect_out . 그만큼-지수 플래그도 비슷하게 지원됩니다.

패턴eof 파일 끝에서 실행되는 작업을 소개합니다. 분리 된eof 패턴은 또한-산출 플래그는 출력을 쓰는 동안 eof가 감지되면 일치합니다. 기본값은eof 액션은 "return"이므로,상호 작용하다 단순히 EOF를 반환합니다.

패턴타임 아웃 주어진 시간 동안 문자를 읽지 않은 후에 실행되는 작업 (초 단위의 시간 초과)과 작업을 소개합니다. 그만큼타임 아웃 패턴은 가장 최근에 지정된 프로세스에 적용됩니다. 기본 시간 제한은 없습니다. 특수 변수 "timeout"(배고 있다 명령)은이 시간 초과에 영향을주지 않습니다.

예를 들어, 다음 명령문을 사용하여 한 시간 동안 아무 것도 입력하지 않았지만 시스템 메시지를 자주받는 사용자를 자동 로그 아웃 할 수 있습니다.

interact -input $ user_spawn_id 시간 초과 3600 return -output $ spawn_id

패턴이 키워드 인 경우없는 , null은 허용됩니다 (remove_nulls 명령), 단일 ASCII 0이 일치하면 해당 본문이 실행됩니다. glob 또는 regexp 패턴을 통해 0 바이트를 일치시키는 것은 불가능합니다.

패턴으로 플래그를 붙입니다.-나는 쓴다 변수를 발생시킨다. interact_out (spawn_id) 패턴 (또는 eof)과 일치하는 spawn_id로 설정됩니다.

다음과 같은 작업단절잇다 제어 구조 (즉,…에 대한 , proc ) 일반적인 방식으로 행동합니다. 하나반환 대화 상대가 호출자에게 돌아가도록합니다.inter_return 원인상호 작용하다 그 호출자의 반환을 일으키는 것. 예를 들어, "proc foo"가 호출 된 경우상호 작용하다 그 다음에 행동을 실행했다.inter_return , proc foo 돌아올거야. (즉, if상호 작용하다 전화통역사 대화 형으로 타이핑하다반환 상호 작용이 계속되고,inter_return 상호 작용이 호출자에게 반환됩니다.)

동안상호 작용하다 모든 문자가 현재 프로세스로 전달 될 수 있도록 원시 모드가 사용됩니다.현재 프로세스가 작업 제어 신호를 수신하지 못하면 정지 신호 (기본적으로 ^ Z)가 전송되면 중지됩니다. 다시 시작하려면 계속 신호를 보내십시오 (예 : "kill -CONT"). 그런 프로세스에 SIGSTOP을 보내고 싶다면 (^ Z에 의해) 먼저 csh를 생성 한 다음 프로그램을 실행하는 것을 고려하십시오. 반면에 SIGSTOP을 보내려는 경우배고 있다 그 자체로, (아마도 이스케이프 문자를 사용하여) 먼저 인터프리터를 호출 한 다음 ^ Z를 누르십시오.

문자열 - 본문 쌍은 인터프리터에 들어가서 대화식으로 명령을 실행하지 않아도되기 때문에 속기로 사용할 수 있습니다. 이전 터미널 모드는 문자열 본문 본문 본문이 실행되는 동안 사용됩니다.

속도면에서 액션은 기본적으로 원시 모드로 실행됩니다. 그만큼-다시 놓기 플래그는 이전에 가지고 있던 모드로 터미널을 재설정합니다.상호 작용하다 실행되었다 (항상, 요리 된 모드). 모드가 전환 될 때 입력 된 문자는 손실 될 수 있습니다 (일부 시스템에서는 터미널 드라이버의 불행한 기능 임). 사용하는 유일한 이유-다시 놓기 당신의 행동이 요리 된 모드로 달리는지 여부입니다.

그만큼-에코 flag는 다음 패턴과 일치하는 문자를 각 문자를 읽을 때 생성 한 프로세스로 다시 보냅니다. 이것은 사용자가 부분적으로 입력 된 패턴으로부터 피드백을 볼 필요가있을 때 유용 할 수 있습니다.

패턴이 에코되지만 결국 일치하지 않으면 문자가 생성 된 프로세스로 전송됩니다. 스폰 된 프로세스가 그 다음에 에코하면 사용자가 문자를 두 번 볼 수 있습니다.-에코 사용자가 패턴을 완료하지 않을 가능성이있는 상황에서만 적합 할 수 있습니다. 예를 들어 다음은 rftp에서 인용 한 것입니다. recursive-ftp 스크립트는 ~ g, ~ p 또는 ~ l을 입력하여 현재 디렉토리를 재귀 적으로 가져 오거나 입력하거나 나열합니다. 이것은 보통의 ftp 명령과는 너무 멀리 떨어져 있기 때문에 사용자가 실수로 ~을 입력하지 않을 것입니다.이 경우에는 어쨌든 결과를 무시할 것입니다.

상호 작용 {-echo ~ g {getcurdirectory 1} -echo ~ l {getcurdirectory 0} -echo ~ p {putcurdirectory}}

그만큼노 버퍼 플래그는 문자가 읽힐 때 다음 패턴과 일치하는 문자를 출력 프로세스로 보냅니다.

이는 프로그램이 패턴을 에코 백하도록하려는 경우에 유용합니다. 예를 들어, 다음은 사람이 어디에서 전화를 걸고 있는지 모니터링하는 데 사용될 수 있습니다 (Hayes 스타일 모뎀). "atd"가 표시 될 때마다 스크립트는 나머지 행을 기록합니다.

proc lognumber {} {상호 작용 -nobuffer -re "(. *) r"return $ log "시계 형식 시계 초 : dialed $ interact_out (1, 문자열)"} interact -nobuffer "atd"lognumber

동안상호 작용하다 , 이전 사용log_user 무시됩니다. 특히,상호 작용하다 사용자가 맹목적으로 상호 작용하기를 원하지 않는다고 가정하기 때문에 출력을 강제로 기록 (표준 출력으로 보냄)합니다.

그만큼-영형 플래그는 다음 키 몸체 쌍이 현재 프로세스의 출력에 적용되도록합니다. 예를 들어, 텔넷 세션 중에 원하지 않는 문자를 보내는 호스트를 처리 할 때 유용 할 수 있습니다.

기본적으로,상호 작용하다 사용자가 stdin을 쓰고 stdout을 읽을 것으로 기대합니다.배고 있다 프로세스 자체. 그만큼-유 플래그 ( "사용자"의 경우)는상호 작용하다 사용자를 인수로 지정된 프로세스 (스폰 된 ID 여야 함)로 찾습니다.

이렇게하면 두 개의 무관 한 프로세스가 명시 적 루프를 사용하지 않고 함께 조인 될 수 있습니다. 디버깅을 돕기 위해 Expect 진단은 항상 stderr (또는 특정 로깅 및 디버깅 정보에 대해서는 stdout)로 이동합니다. 같은 이유로,통역사 명령은 stdin에서 대화식으로 읽습니다.

예를 들어, 다음 단편은 로그인 프로세스를 작성합니다. 그런 다음 사용자 (도시되지 않음)에게 전화를 걸고 마지막으로 두 사용자를 연결합니다. 물론 모든 프로세스가 로그인으로 대체 될 수 있습니다. 예를 들어 쉘을 사용하면 사용자가 계정과 암호를 제공하지 않고도 작업 할 수 있습니다.

spawn login set login $ spawn_id spawn 팁 모뎀 # 사용자에게 다시 전화 걸기 # 사용자를 login에 연결 interact -u $ login

출력을 여러 프로세스에 보내려면 각 스폰 ID 목록 앞에 a-산출 깃발. 출력 스폰 ID의 그룹에 대한 입력은 a로 시작되는 스폰 ID리스트에 의해 결정될 수있다.-입력 깃발. (양자 모두-입력-산출 같은 형식으로 목록을 가져갈 수 있습니다.-나는 ~ 안에있는 깃발배고 있다 명령, any_spawn_id가 의미가 없음을 제외하고는상호 작용하다 ) 다음의 모든 플래그와 문자열 (또는 패턴)은 다른 -input 플래그가 나타날 때까지이 입력에 적용됩니다. 없는 경우-입력 나타납니다,-산출 "-put $ user_spawn_id -output"을 의미합니다. (마찬가지로, 가지고 있지 않은 패턴의 경우-입력 .) 하나라면-입력 $ user_spawn_id가 무시됩니다. 잠시-입력 $ spawn_id가 재정의됩니다. 추가-입력 플래그를 지정할 수 있습니다.

두 개의 묵시적인 입력 프로세스는 기본적으로 출력을 $ spawn_id 및 $ user_spawn_id (역순으로)로 지정합니다. 만약-입력 플래그가 표시되지 않음-산출 플래그를 사용하면 해당 프로세스의 문자가 삭제됩니다.

그만큼-나는 플래그는 현재 spawn_id에 대한 대체를 도입합니다.-입력 또는-산출 플래그가 사용됩니다. -i 플래그는 -o 플래그를 의미합니다.

간접 스폰 AN 드를 사용하여 상호 작용중인 프로세스를 변경할 수 있습니다. 간접 스폰 APP id는 -i, -u, -input 또는 -output 플래그로 지정할 수 있습니다.

통역사 args

사용자가 대화식으로배고 있다 및 Tcl 명령. 각 명령의 결과가 인쇄됩니다.

다음과 같은 작업단절잇다 제어 구조 (즉,…에 대한 , proc ) 일반적인 방식으로 행동합니다. 하나반환 통역사가 발신자에게 돌아가도록합니다.inter_return 원인통역사 그 호출자의 반환을 일으키는 것. 예를 들어, "proc foo"가 호출 된 경우통역사 그 다음에 행동을 실행했다.inter_return , proc foo 돌아올거야. 다른 명령의 원인통역사 새 명령을 계속 요구합니다.

기본적으로 프롬프트에는 두 개의 정수가 포함됩니다. 첫 번째 정수는 평가 스택의 깊이 (즉, Tcl_Eval이 몇 번 호출되었는지)를 나타냅니다. 두 번째 정수는 Tcl 히스토리 식별자입니다. 프롬프트는 다음 프롬프트가되는 "prompt1"이라는 프로 시저를 정의하여 설정할 수 있습니다. 문장에 열린 따옴표, 괄호, 중괄호 또는 대괄호가있는 경우, 2 차 프롬프트 (기본적으로 "+>")가 개행시 발행됩니다. 2 차 프롬프트는 "prompt2"라는 프로 시저를 정의하여 설정할 수 있습니다.

동안통역사 호출자가 원시 모드를 사용 중이라도 조리 된 모드가 사용됩니다.

stdin이 닫히면,통역사 ~하지 않는 한- 에프 플래그가 사용되는 경우 후속 인수가 호출됩니다.

log_file args -a file

파일 이름이 제공되면,log_file 파일의 해당 시점에서 시작하는 세션의 성적표를 기록합니다.log_file 인수가 주어지지 않으면 녹음을 멈 춥니 다. 이전 로그 파일이 닫힙니다.

파일 이름 대신 Tcl 파일 식별자가-열다 또는-leaveopen 플래그. 이것은 명령. (만나다 더 많은 정보를 위해서.)

그만큼-에이 플래그는 출력에 의해 표시되지 않은 출력을 기록하도록합니다.log_user 명령.

기본적으로log_file 명령 추가하다 한 번에 여러 번 로그 오프 할 수있는 편리함을 위해 오래된 파일을 자르지 않고 오래된 파일에 저장합니다. 파일을 자르려면-noappend 깃발.

그만큼-info 플래그는 log_file이 주어진 최근의 비 정보 인수에 대한 설명을 리턴하도록합니다.

log_user -info | 0 | 1

기본적으로 send / expect 대화 상자는 stdout (및 열려있는 경우 로그 파일)에 기록됩니다. stdout에 대한 로깅은 "log_user 0"명령으로 비활성화되고 "log_user 1"에 의해 다시 활성화됩니다. 로그 파일로 로깅은 변경되지 않습니다.

그만큼-info 플래그는 log_user가 주어진 가장 최근의 비 정보 인수에 대한 설명을 리턴하도록합니다.

match_max -d -i spawn_id 크기

내부적으로 사용되는 버퍼의 크기 (바이트 단위)를 정의합니다.배고 있다 . 없음 크기 인수가 있으면 현재 크기가 반환됩니다.

와 더불어-디 플래그를 지정하면 기본 크기가 설정됩니다. 초기 기본값은 2000입니다.-나는 플래그의 경우, 이름은 스폰 된 id에 대해 설정되고, 그렇지 않으면 현재 프로세스에 대해 설정됩니다.

overlay - # spawn_id - # spawn_id … 프로그램 args

실행하다 "프로그램 args "현재의 대신에배고 있다 프로그램을 종료합니다. 벌거 벗겨진 하이픈 인수는 마치 로그인 쉘인 것처럼 명령 이름 앞에 하이픈을 표시합니다. 모든 spawn_ids는 인수로 명명 된 것을 제외하고는 닫힙니다. 이들은 명명 된 파일 식별자에 매핑됩니다.

Spawn_ids는 새 프로그램이 상속 할 파일 식별자에 매핑됩니다. 예를 들어, 다음 행은 체스를 실행하고 현재 프로세스 (예 : 체스 마스터)에 의해 제어되도록 허용합니다.

오버레이 -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id 체스

이것은 "interact -u"보다 더 효율적이지만, 프로그램 된 상호 작용을 수행하는 기능을 희생합니다.배고 있다 프로세스가 더 이상 제어 할 수 없습니다.

제어 단자는 제공되지 않습니다. 따라서 표준 입력을 연결 해제하거나 다시 매핑하면 작업 제어 (쉘, 로그인 등)를하는 프로그램이 제대로 작동하지 않습니다.

패리티 -d -i spawn_id 값

패리티가 생성 된 프로세스의 출력에서 ​​유지되거나 제거되어야하는지 여부를 정의합니다. 만약 값 패리티가 제거되고, 그렇지 않으면 제거되지 않습니다. 없음 값 인수가 있으면 현재 값이 반환됩니다.

와 더불어-디 플래그를 지정하면 기본 패리티 값이 설정됩니다. 초기 기본값은 1이며, 즉 패리티가 제거되지 않습니다.-나는 플래그를 사용하면 이름이 지정된 spawn id에 대해 패리티 값이 설정되고 그렇지 않으면 현재 프로세스에 대해 설정됩니다.

remove_nulls -d -i spawn_id value

패턴 일치 또는 변수에 저장하기 전에 생성 된 프로세스의 출력에서 ​​null을 유지할지 또는 제거할지 정의합니다. expect_out 또는 interact_out . 만약 값 1이면 널 (NULL)이 제거됩니다. 만약 값 0이면 널 (null)이 제거되지 않습니다. 없음 값 인수가 있으면 현재 값이 반환됩니다.

와 더불어-디 플래그를 지정하면 기본값이 설정됩니다. 초기 기본값은 1입니다. 즉, null이 제거됩니다.-나는 플래그의 경우, 값은 지정된 스폰 ID에 대해 설정되고, 그렇지 않으면 현재 프로세스에 대해 설정됩니다.

nulls가 삭제되는지 어떠했는지,배고 있다 로그와 stdout에 null 바이트를 기록합니다.

send - 플래그 문자열

전송 끈 현재 프로세스로 예를 들어, 명령

"hello world r"을 보내십시오.

문자를 현재 프로세스로 보냅니다. (Tcl은 printf와 같은 명령을 포함한다.체재 ) 임의로 복잡한 문자열을 만들 수 있습니다.)

라인 버퍼 된 입력을 가진 프로그램은 리턴 문자가 전송 될 때까지 문자를 읽지 않지만 문자는 즉시 전송됩니다. 리턴.자는 " r"로 표시됩니다.

그만큼-- 플래그는 다음 인수가 플래그가 아닌 문자열로 해석되도록합니다.어떤 문자열이라도 실제로는 플래그처럼 보일지라도 "-"앞에 붙을 수 있습니다. 이것은 우연히 플래그처럼 보이지 않는 변수 문자열을 지정하는 신뢰할 수있는 메커니즘을 제공합니다. ( "-"로 시작하는 모든 문자열은 이후 옵션을 위해 예약되어 있습니다.)

그만큼-나는 플래그는 문자열이 명명 된 spawn_id로 전송됨을 선언합니다. spawn_id가 user_spawn_id , 터미널이 원시 모드에있는 경우, 문자열의 개행 문자는 복귀 - 개행 문자 시퀀스로 변환되어 터미널이 조리 된 모드 인 것처럼 나타납니다. 그만큼-노골적인 플래그는이 변환을 사용 불가능하게합니다.

그만큼-없는 플래그는 널 문자 (0 바이트)를 보냅니다. 기본적으로 하나의 null이 전송됩니다. 정수 다음에-없는 보낼 null 수를 나타냅니다.

그만큼-단절 플래그는 중단 조건을 생성합니다. 이것은 스폰 ID가 "spawn -open"을 통해 열린 tty 장치를 참조하는 경우에만 의미가 있습니다. 팁과 같은 프로세스를 생성 한 경우 팁 생성 규칙을 사용하여 휴식을 취해야합니다.

그만큼-에스 플래그는 출력이 "천천히"전송되게하여 컴퓨터가 동일한 버퍼를 outtype하지 않는 사람을 위해 설계된 입력 버퍼를 outtypes하는 일반적인 상황을 방지합니다. 이 출력은 두 요소 목록을 취하는 변수 "send_slow"의 값에 의해 제어됩니다. 첫 번째 요소는 원자 적으로 보낼 바이트 수를 나타내는 정수입니다. 두 번째 요소는 원자 송신이 분리되어야하는 초 수를 설명하는 실수입니다. 예를 들어, "send_slow {10 .001}"을 설정하면 "send -s"가 전송 된 10 자 사이에 1 밀리 초의 문자열을 전송하게됩니다.

그만큼-h 플래그는 인간이 실제로 타이핑하는 것과 같이 출력이 보내지도록합니다 (다소). 문자들 사이에는 인간과 유사한 지연이 나타납니다. (이 알고리즘은와 이블 분포를 기반으로하며이 특정 응용 프로그램에 맞게 수정되었습니다.)이 출력은 다섯 요소 목록을 사용하는 "send_human"변수 값에 의해 제어됩니다. 처음 두 요소는 문자로 된 평균 왕복 시간 (초)입니다. 첫 번째는 기본적으로 사용됩니다. 두 번째 단어는 종종 단어 전환점에서 발생하는 미묘한 일시 중지를 시뮬레이트하기 위해 단어 끝에서 사용됩니다. 세 번째 매개 변수는 .1 변수가 상당히 가변적이고 1이 적당히 가변적이며 10은 변함이없는 변수의 척도입니다. 극단은 0에서 무한대까지입니다. 마지막 두 매개 변수는 각각 최소 및 최대 왕복 시간입니다. 최소값과 최대 값이 마지막으로 사용되며 마지막 시간은 "클립"입니다. 최소값과 최대 값으로 충분한 값을 설정하면 궁극적 인 평균값과 주어진 평균값이 상당히 다를 수 있습니다.

예를 들어, 다음 명령은 빠르고 일관적인 타이피스트를 에뮬레이션합니다.

set send_human {.1 .3 1 .05 2} send -h "배고프다. 점심 먹자."

숙취 후에는 다음과 같은 것이 더 적합 할 수 있습니다.

set send_human {.4 .4 .2 .5 100} send -h "굿나잇 파티 밤!"

send 인수에 실수와 수정 사항을 포함 시켜서 오류 정정 상황을 스스로 설정할 수 있지만 오류는 시뮬레이션되지 않습니다.

널 문자 전송, 중단 전송, 느린 출력 강제 및 휴먼 스타일 출력의 플래그는 함께 사용할 수 없습니다. 마지막에 지정된 것만 사용됩니다. 또한, 끈 인자는 null 문자 나 break를 보내기위한 플래그로 지정 될 수있다.

첫 번째를 선행하는 것이 좋습니다.보내다 ~에 의한 과정에배고 있다. 배고 있다 프로세스가 시작되기를 기다리는 동안보내다 할 수 없다. 특히, 첫 번째보내다 프로세스가 실행되기 전에 완료되면 데이터를 무시할 위험이 있습니다. 대화 형 프로그램이 초기 프롬프트를 제공하지 않는 상황에서는보내다 다음과 같은 지연에 의해 :

# 침입하는 방법에 대한 해커의 힌트를 피하기 위해, #이 시스템은 외부 암호를 요구하지 않습니다. # exec가 spawn telnet을 완료 할 때까지 5 초 동안 기다리십시오. very.secure.gov sleep 5 send password r

exp_send 에 대한 별칭입니다. 보내다. Tk 환경에서 Expectk 또는 Expect의 다른 변형을 사용하는 경우,보내다 완전히 다른 목적으로 Tk에 의해 정의됩니다.exp_send 환경 간의 호환성을 위해 제공됩니다. 다른 Expect의 다른 send 명령에도 유사한 별명이 제공됩니다.

send_error -flags 문자열

처럼보내다 단, 현재 프로세스가 아닌 stderr로 출력이 보내진다는 점만 다릅니다.

send_log - 문자열

처럼보내다 단, 문자열은 로그 파일에만 전송됩니다 (log_file ) 로그 파일이 열려 있지 않으면 인수가 무시됩니다.

send_tty -flags 문자열

처럼보내다 단, 현재 프로세스가 아닌 / dev / tty로 출력이 보내진다는 점만 다릅니다.

send_user -flags 문자열

처럼보내다 단, 현재 프로세스가 아니라 stdout으로 출력이 보내진다는 점만 다릅니다.

수면 초

주어진 초 수 동안 스크립트를 잠자기 상태로 만듭니다. 초는 10 진수 일 수 있습니다. Expect가 사용하는 동안 인터럽트 (및 Expectk을 사용하는 경우 Tk 이벤트)는 처리됩니다.

spawn args 프로그램 args

실행중인 새 프로세스를 만듭니다. "프로그램 args "라고 부릅니다. stdin, stdout 및 stderr은 Expect에 연결되어 있으므로 다른 사람이 읽고 쓸 수 있습니다배고 있다 명령. 연결이 끊어집니다.닫기 또는 프로세스 자체가 파일 식별자를 닫는 경우.

프로세스가 시작할 때 , 변수 spawn_id 해당 프로세스를 나타내는 디스크립터로 설정된다. 에 의해 설명 된 프로세스 spawn_id 고려된다 "흐름 프로세스 ". spawn_id 사실상 직업 통제를 제공하면서 읽거나 쓸 수 있습니다.

user_spawn_id 는 사용자를 참조하는 설명자를 포함하는 전역 변수입니다. 예를 들어, spawn_id 이 값으로 설정되면,배고 있다 ~ 같이 행동하다expect_user .

.나는 error_spawn_id 표준 오류를 참조하는 설명자를 포함하는 전역 변수입니다. 예를 들어, spawn_id 이 값으로 설정되면,보내다 ~ 같이 행동하다send_error .

tty_spawn_id / dev / tty를 참조하는 디스크립터를 포함하는 전역 변수입니다. / dev / tty가없는 경우 (예 : cron, at 또는 batch 스크립트) tty_spawn_id 정의되지 않았습니