하드웨어 테스트 애플리케이션의 경우 Tcl/Tk 스크립트 내에서 특정 로컬 IP 주소에 대한 Linux ping과 같은 몇 가지 외부 cli 애플리케이션을 실행하고 상호 작용해야 합니다.
저는 Windows 7(2년 전 XP도 포함)에서 Cygwin의 Tcl8.5 및 Expect 5.45를 사용하여 Cygwin 환경에서 이 작업을 수행하여 좋은 성공을 거두었습니다. bash를 생성한 다음 tcl의 예상 명령을 사용하여 'ping', 'ls', 'touch' 및 기타 여러 도구와 대화할 수 있습니다. 나중에 'exit'를 사용하여 bash를 닫으면 쉘 프로세스가 완료되고 필요한 만큼 자주 다른 명령을 사용하여 이를 반복할 수 있습니다.
Linux(debian Stretch)에서는 외부 앱과의 상호작용을 포함하여 동일한 tcl/tk 스크립트가 매력적으로 실행됩니다.
이제 회사 정책에 따라 이 모든 것이 Windows 10에서 실행되도록 해야 합니다. 저는 이에 대해 읽고 동료들과 논의한 후 Ubuntu 18.04 wsl 이미지와 함께 Linux용 Windows 하위 시스템(WSL)을 내 컴퓨터와 ActiveState Tcl에 설치했습니다. 8.5(Windows 버전) 및 5.45도 주전자를 통해 예상됩니다.
Tcl 스크립트 자체는 Wish GUI, 직렬 통신 및 DUT 임베디드 하드웨어와의 이더넷 통신을 포함하여 예상대로 실행되지만 여전히 ping 및 기타 Linux cli 앱과 같은 외부 프로그램을 시작하고 대화할 수 없습니다. wsl.exe 인터페이스를 사용합니다.
Windows 탐색기나 (Windows CMD-) 명령 셸에서 클릭하여 wsl.exe를 수동으로 시작하면 가상 터미널에 bash 프롬프트가 표시되고 필요한 모든 도구 명령을 대화식으로 입력할 수 있습니다.
그러나 (Expect-) 'spawn' 명령을 사용하거나 심지어 간단히 Tcl 스크립트 내에서 wsl.exe를 시작하려고 하면 다음과 같습니다.
exec C:\\Windows\\system32\\wsl.exe $lnxcmd $params ,
wsl.exe에 대해 '파일을 찾을 수 없습니다'라는 메시지가 표시되거나 전혀 응답이 없습니다.
wsl.exe를 실행하고 Windows 도메인에서 실행되는 Tcl 스크립트 내에서 Linux 프로그램을 '프로그래머틱하게' 실행하고 상호 작용(Expect에서 처리하는 stdin/stdout/stderr)하는 방법은 무엇입니까?
Tcl 인터프리터 %-shell 프롬프트(tclsh85 또는 Wish85) 내에서 호출된 '% dir C:\Windows\system32\ws*.exe'도 단일 결과를 표시하지 않지만 WSL.EXE 파일은 해당 Windows 내에 확실히 존재합니다. 시스템 폴더?
답변1
그러나 (Expect-) 'spawn' 명령을 사용하거나 심지어 간단히 Tcl 스크립트 내에서 wsl.exe를 시작하려고 하면 다음과 같습니다.
exec C:\Windows\system32\wsl.exe $lnxcmd $params ,
wsl.exe에 대해 '파일을 찾을 수 없습니다'라는 메시지가 표시되거나 전혀 응답이 없습니다.
경로가 잘못되었을 수도 있습니다. 저는 Tcl/tk를 사용하지 않지만 여기서 읽을 수 있는 내용은 다음과 같습니다.https://www.tcl.tk/man/tcl8.3/TclCmd/filename.htm#M26 당신이 당신의 길을 쓰는 방식은 좋은 것이 아닙니다.
또한 wsl에서 linux 명령을 실행하려면 -e 매개변수를 사용하는 것이 좋습니다.wsl -e ping 192.168.1.1