일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자 이제 시작이야
- 핀토스 프로젝트
- 아직도 실험 중
- botw
- 마일섬
- multi-oom
- 글리치
- 가테
- alarm clock
- 핀토스 프로젝트 2
- 핀토스 프로젝트 3
- PINTOS
- 노가다
- 내일부터
- 일지 시작한 지 얼마나 됐다고
- 바빠지나?
- 파란 장미
- Project 1
- 제발흰박
- 핀토스 프로젝트 1
- 핀토스 프로젝트 4
- 글루민
- 끝
- 셋업
- 황금 장미
- Today
- Total
거북이의 쉼터
(2022.03.21) 자동 실행 쉘 스크립트 구현 본문
쉬어(?)가는 차원에서 오늘은 COW는 더 안 건들이고 다른 걸로 놀아(?)볼 것 이다. 바로 자동으로 여러번 채점 코드를 돌리는 프로그램이다. 이전에 핀토스를 진행할 때는 multi-oom 용도로 100번인가 돌리는 코드를 만들었었는데 이렇게 또 만들게 되었다. 사실 안 만들고 그냥 운에 맡기려고 했는데, 그러기에는 COW에서 다소 불안한 요인이 발견되어 만들게 되었으니 결국 이 스크립트는 핀토스와 땔래야 땔 수 없는 운명인가보다. 그나저나 저 쉘은 참 발음이 애매하다. 영어로 shell일텐데 왜 표기는 수-엘로 발음되는 쉘로 표기하는거지... 셸이 더 낫지 않나?
뻘소리 그만하고 이제 본격적으로 짜 보자. 자동으로 채점하기 위해서는 실패할 때마다 걸러주고, 아무것도 실패한 것이 없으면 화면에 ALL PASS라고 뜨도록 해줄 것이다. 인터넷의 여러 곳을 참조해서 기본적인 문법에 맞춰 간단하게 1번만 실행하도록 하는 코드를 짜 봤다.
make clean >> /dev/null
make >> /dev/null
flag=true
make check | while read line;
do
if [[ $line == *"FAIL"* ]]; then
flag=false
echo $line
fi
done
if [[ $flag == false ]]; then
make grade
mv "./build/grade" "./grade_0"
else
echo "ALL PASS"
fi
실패할 경우, 실패 요인을 분석하기 위해 실행 결과가 남는 grade 파일을 옮기도록 했다. 실행을 시켜서 테스트해보자. 아직 warning이 떠서 지저분하고, 무엇보다 진행도가 안 보여서 심심하다. 진행도를 보여주도록 한다.
make clean > /dev/null 2>&1
make > /dev/null 2>&1
flag=true
make check | while read line;
do
if [[ $line == *"FAIL"* ]]; then
flag=false
echo $line
elif [[ $line == *"pintos"* ]]; then
echo $line
fi
done
if [[ $flag == false ]]; then
make grade
mv "./build/grade" "./grade_0"
else
echo "ALL PASS"
fi
이제 지저분한 것이 하나도 없고, 실행되는 테케도 보인다. 정상적으로 ALL PASS가 작동되는지 보기 위해 끝까지 기다려보았다. threads 프로젝트가 이틀 뒤 제출이라 그냥 돌리긴 했는데, mlfqs 때문에 꽤 오래 걸린다. 그래도, 정상 실행되는 것을 보았다. 이제 for문만 추가하면 완벽하다. 아래와 같이 구현을 끝낸다.
for ((i = 0; i < 20; i++)); do
make clean > /dev/null 2>&1
make > /dev/null 2>&1
flag=true
make check | while read line;
do
if [[ $line == *"FAIL"* ]]; then
flag=false
echo $line
elif [[ $line == *"pintos"* ]]; then
echo $line
fi
done
if [[ $flag == false ]]; then
make grade
mv "./build/grade" "./grade_$i"
else
echo "ALL PASS"
fi
done
사실 좀 더 복잡하게 하려면 플젝 번호와 반복횟수를 외부에서 지정하게도 할 수 있지만 플젝 개수도 얼마 안 되는데 그냥 내부 코드를 수정하도록 한다. 이제 남은 건 컴퓨터의 중노동 뿐이다. 물론 내 것이 아닌 학교에서 제공한 서버가... 미안하다. 화이팅!
'코딩 삽질 > KAIST PINTOS (CS330)' 카테고리의 다른 글
(2022.03.22) 프로젝트 2 반복 검사 (0) | 2022.03.22 |
---|---|
(2022.03.22) 자동 실행 쉘 스크립트 구현 (2) (0) | 2022.03.22 |
(2022.03.20 ~ 03.21) COW 구현 (2) (0) | 2022.03.21 |
(2022.03.20) COW 구현 (1) (0) | 2022.03.20 |
(2022.03.18) Return To Pintos + COW 가이드라인 (0) | 2022.03.18 |