다른 스크립트에서 bash 스크립트를 실행하고 출력을 리디렉션합니다.

다른 스크립트에서 bash 스크립트를 실행하고 출력을 리디렉션합니다.

안녕하세요 여러분 저는 프로그램을 작성해야 합니다.. 정말 간결하게 설명하겠습니다... 그리고 모자는 이미 완료했고 무엇을 해야 하는지...

간단히 말해서 Bash에서 학생들의 연습 문제를 실행하고 그것이 올바른지 확인하는 "시뮬레이터"를 수행해야 합니다. 각 연습에 대해 점수를 계산하고 학생이 시험에 합격했는지 여부를 말해야 합니다.

거의 모든 작업을 수행했습니다... 작성해야 할 코드 몇 줄이 누락된 것 같습니다.. 하지만 이것이 가장 중요하다고 생각합니다... :(

내 스크립트는 TEST.SH이고 학생의 연습을 실행해야 합니다. 연습은 ELABORATO.SH 스크립트입니다... 이제 몇 가지 시나리오를 가질 수 있습니다.

  1. ELABORATO.SH는 입력에서 일부 값을 매개변수로 기다립니다.
  2. ELABORATO.SH는 표준 입력, 키보드 입력을 기다립니다.
  3. ELABORATO.SH는 파일/fifo/etc에 출력을 씁니다. ;

  1. 첫 번째 점은 해결하기가 정말 간단합니다. 실제로 TEST.SH에서 ELABORATO.SH다음과 같이 호출합니다.

    . ELABORATO.SH param1 param2 param3;
    

    두 번째, 세 번째는 더 복잡하네요..

  2. 파일에서 문자열을 읽어야 하고(괜찮습니다) 이 문자열을 ELABORATO.SHstdin의 문자열처럼 전달해야 합니다.

  3. ... 의 출력으로 파일을 생성해야 합니다 ELABORATO.SH. 예를 들어 ELABORATO.SH파일을 생성하는 경우(출력 파일의 이름을 모릅니다) 다른 디렉터리에도 파일을 생성해야 합니다. 어떻게 할 수 있습니까? 그래요?

답변1

이것은 숙제처럼 의심스럽게 들리지만*, 시작합니다.

  1. 왜 스크립트를 소싱하겠습니까 ELABORATO.SH? 그렇게 하고 exit명령문이나 오류가 있는 경우에도 TEST.SH마찬가지입니다. 나는 그것이 당신이 원하는 것이라고 생각하지 않습니다. 그냥 스크립트를 실행하겠습니다.

    bash ELABORATO.SH param1 param2
    
  2. 입력을 리디렉션하는 것에 대해 생각해 보셨나요?

    bash ELABORATO.SH param1 param2 < INPUT_FILE
    
  3. 의 출력을 캡처하려면 ELABORATO.SH리디렉션이 아닌 것 같습니다.만들어진그에 대한?

    bash ELABORATO.SH param1 param2 < INPUT_FILE > OUTPUT_FILE
    

어떤 파일이 작성되는지 알아내는 ELABORATO.SH것은 쉽지 않습니다. (부담: 출력 파일을 모른다면 의 점수를 계산하는 데 어떻게 관련이 있을 수 있습니까 ELABORATO.SH? 왜 굳이 옮겨야 합니까?)

어쨌든, 간다. 다음 파이프라인은 다음에 의해 생성된 파일을 나열합니다 ELABORATO.SH.

strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE \
    | grep '^open(.*O_CREAT' | cut -d\" -f 2  

그런 다음 다른 곳으로 옮기려면 다음을 수행하십시오.

for f in $(
    strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE 
       | grep '^open(.*O_CREAT' | cut -d\" -f 2) 
do
    mv "$f" /path/to/elsewhere
done

*) AskUbuntu의 친절한 사람들을 감독자에게 추천해주세요.

관련 정보