나는 Big Sur를 사용하고 있으며 패키지(패키지는 NASA의 스펙트럼 피팅 패키지인 XSPEC)를 실행한 다음 해당 패키지의 명령을 실행하는 스크립트를 작성하려고 합니다. 먼저 XSPEC
패키지를 연 다음 문제를 실행하고 싶습니다. Enter 키 data 1:1 /Users/me/Desktop/Drive/my\ data/spectrum2.pha
를 사용하여 두 줄을 분리하면 패키지가 종료될 때까지 첫 번째 줄이 실행되지 않는다고 가정하기 때문에 두 번째 줄이 실행되지 않습니다. XSPEC version: 12.11.1 Build Date/Time: Thu Jul 1 04:09:17 2021 XSPEC12>
XSPEC 시작이 완료될 때마다 인쇄됩니다 (세 개의 개별 라인에 인쇄됨). 이전 줄이 인쇄되면 다음 단계로 진행하는 if 문을 만드는 방법이 있나요?
답변1
~에서XSPEC 문서:
XSPEC은 명령 기반 대화형 프로그램입니다.
XSPEC12>
입력이 필요할 때마다 프롬프트가 표시됩니다.
이는 XSPEC 프로그램이 사용자가 시도하는 방식으로 수행되도록 의도되지 않았음을 의미합니다. 또한 단락의 나머지 부분을 참고하십시오.
화살표 키를 사용하여 명령 및 인라인 편집을 호출합니다. XSPEC은 Tcl을 사용자 인터페이스로 사용하여 루프, 조건, 파일 I/O 등을 제공합니다. Tcl 구문에 대한 자세한 내용은 부록 A 및 해당 링크를 참조하세요.
특히 XSPEC은 Tcl을 사용합니다. Tcl 자체는 스크립팅 언어입니다. 문서의 문구는 zsh
XSPEC를 비대화식으로 수행하려고 시도하는 대신 Tcl 스크립트를 작성하고 사용하여 XSPEC 프로그램과 해당 작업을 지시/제어할 수 있음을 시사합니다. 대신 데이터 세트를 로드하고 처리한 후 결과를 인쇄하는 Tcl 스크립트를 작성하세요.
이를 수행하는 방법에 대한 자세한 내용은 XSPEC 매뉴얼을 읽어야 합니다. 매뉴얼은 또한 이 작업을 수행하기 위해 Tcl을 배우고 사용하는 방법에 대한 링크와 정보를 제공합니다.
추가하도록 편집됨: 나도 지금 전체 data ...
라인을 생각하고 있습니다.예XSPEC 명령(Tcl). 그러므로 그것은아니요zsh
그것은 단지 명령일 뿐입니다. 어쨌든, 당신이 이것을 하려는 방식은 완전히 잘못되었습니다. data ...
외부 스크립트 파일이나 쉘 리디렉션을 포함하여 다양한 방법으로 XSPEC 명령을 XSPEC에 로드/실행할 수 있습니다 . 이 작업을 수행하는 방법을 알아보려면 다시 XSPEC 설명서를 읽어보세요.
답변2
XSPEC
깔끔한 접근 방식은 이것이 무엇이든 로드가 완료되었음을 알 수 있는 방법이 있는지 알아내는 것입니다 . 이에 대해 세부정보를 제공하지 않으셨기 때문에 죄송하지만 도움을 드릴 수 없습니다.
간단하고 해킹적인 방법은 백그라운드에서 첫 번째 명령을 실행하고 다음 명령을 실행하는 사이에 몇 초 동안 기다리도록 스크립트에 지시하는 것입니다. 도구는 sleep
이므로 다음과 같은 것을 원합니다.
#!/bin/zsh
XSPEC &
## Now wait 5 seconds
sleep 5
## And continue
data 1:1 /Users/me/Desktop/Drive/my\ data/spectrum2.pha
wait # for XSPEC to finish
sleep
항상 작동하는 가장 짧은 값을 찾기 위해 시간을 투자할 수 있습니다 .
답변3
다음 명령을 사용하여 대화형 터미널 애플리케이션에 대한 입력을 자동화할 수 있습니다.예상되는MacOS용 스크립트는 다음을 통해 설치할 수 있습니다.스스로 만든.
당신은 이런 것을 원할 것입니다
#!/usr/bin/expect -f
set timeout -1
spawn XSPEC
expect "XSPEC12>"
send -- "data 1:1 /Users/me/Desktop/Drive/my\ data/spectrum2.pha"
# Some expectation which can detect the completion of the previous step
# Further Commands