클로드 코드로 자동화 만들기 #12

맥 timeout command not found, perl 한 줄로 시간 제한 걸기

클로드 코드로 자동화 만들기12편 중 12번째

맥에서 timeout 60을 붙인 명령이 command not found: timeout으로 끝났어요. 셸이 timeout이라는 이름을 못 찾았다는 뜻이에요. 원래 명령 앞에 perl -e 'alarm 60; exec @ARGV'를 붙여 시간 제한을 걸었어요.

맥 터미널에서 timeout 60을 붙인 명령이 바로 끝났어요. 에러는 command not found: timeout이었어요. 셸이 timeout이라는 이름을 못 찾았다는 뜻이에요. 원래 명령 앞에 perl -e 'alarm 60; exec @ARGV'를 붙여 시간 제한을 걸었어요.

저는 회사를 나와 AI로 회사를 만드는 과정을 기록하고 있어요. 하루 일을 클로드 코드에 맡기는데, 이건 AI가 터미널 명령을 대신 치는 도구예요. 그 AI가 친 명령이 여기서 멈췄어요.

command not found timeout, 명령이 아예 없다는 뜻

timeout은 “이 명령이 정한 초를 넘기면 끊어라”를 시키는 명령이에요. AI는 결과를 텔레그램으로 보내는 스크립트 앞에 timeout 60을 붙였어요. 돌아온 답은 이 한 줄뿐이었어요.

(eval):1: command not found: timeout

이 줄은 스크립트가 늦었다는 뜻이 아니에요. 앞에 붙인 timeout이라는 이름을 셸이 못 찾았다는 뜻이에요. 그러니 보내려던 스크립트는 시작도 못 했어요.

한 번 고쳤는데 같은 날 또 걸렸다

timeout 60에서 막힌 뒤 AI는 perl로 시간 제한을 걸었어요.

몇 시간 뒤 AI는 다른 명령에 timeout 150을 다시 붙였어요. 똑같은 command not found: timeout이 또 나왔어요.

perl alarm exec로 시간 제한 거는 법

perl은 맥에 처음부터 들어 있는 프로그래밍 언어예요. AI가 바꿔 친 명령은 이랬어요.

perl -e 'alarm 60; exec @ARGV' bin/pangyeol-stock plan 2>&1 | tail -15

alarm 60은 60초 뒤에 울릴 자명종을 맞춰요. exec @ARGV는 perl 자리를 뒤에 붙은 명령에게 통째로 넘겨요.

맥에서 사람 없이 도는 스크립트를 짠다면, timeout 대신 이 한 줄을 앞에 붙여 두세요. 초는 alarm 뒤 숫자만 바꾸면 돼요.

초를 바꿔 가며 쓰려면 alarm shift

alarm shift를 쓰면 perl이 첫 인자를 초로 받아요. 덕분에 부를 때마다 다른 초를 넘길 수 있어요. 같은 날 다른 스크립트 한 곳이 이 꼴을 썼어요.

그 스크립트가 감싼 명령은 claude -p였어요. 클로드 코드를 사람 없이 한 번 돌리는 명령이에요.

맥 셸에서 걸린 다른 함정은 같은 연재의 zsh no matches found 글에 있어요. 맥으로 옮겨 오며 brew not found를 본 적이 있다면 이번 에러도 같은 종류예요. 셸이 그 이름의 명령을 못 찾은 거예요.

그 스크립트는 perl에 alarm shift; exec @ARGV를 넘기고, 그 뒤에 초와 claude -p를 붙여 불러요.

← 전체 글