batch
데몬과 함께 제공되는 도구는 atd
원칙적으로 시스템 활용도가 특정 수준(기본적으로 1.5) 아래로 떨어질 때만 명령을 실행하는 데 유용합니다. 그러나 이를 사용하는 것은 at
현대 표준에 따라 매우 보기 흉합니다. 에서 실행할 수 있는 스크립트를 제공하거나 /bin/sh
완료, 색상 코딩 등 없이 기본 프롬프트에 대화형으로 명령을 입력해야 합니다.
정말 좋은 점은 nice
명령 앞에 배치하여 배치 대기열에 추가할 수 있는 명령 접두사 도구가 될 것입니다( at
내 질문의 초점은 아니지만 비슷한 유틸리티가 유용할 것입니다). . 예를 들어 다음과 같이 작동할 수 있습니다.
my-batchifying-command python some_longrunning_computational_script.py
그런 것이 존재하나요? 그렇지 않다면 어떻게 만들어졌나요? 나는 이것을 zsh
메인 쉘에 사용하지만 bash
대답은 똑같이 잘 작동하고 더 넓은 적용 범위를 가질 수 있습니다.
답변1
zsh
간단한 명령 의 경우 :
my-batch() {print -r -- ${(qq)@} | batch}
my-batch python some_longrunning_computational_script.sh
그렇게 할 것이다.
루프나 리디렉션과 같이 더 복잡한 것이 필요한 경우 다음을 수행할 수 있습니다.
my-batch eval 'for i in ...; done'
my-batch eval 'echo test > /some/file'
하지만 구문 sh
이 아니라 사용법을 기억하세요 zsh
.
이를 방지하려면 eval
다음 트릭을 사용할 수 있습니다.
alias my-batch=':||'
preexec()
if [[ $1 = my-batch\ * ]]; then
print -r -- "${1#my-batch }" | batch
fi
이번에도 구문을 사용해야 합니다 sh
.
만 가능하니 참고해주세요하나명령(실제로는 파이프)입니다. 중괄호가 여러 개 필요한 경우 중괄호를 사용하세요.
my-batch { ls > /tmp/a; date > /tmp/b; }
위의 아이디어는 my-batch
명령이 아무 작업도 수행하지 않고 명령의 인수도 평가하지 않는다는 것입니다(예: my-batch echo $(date)
로 확장됨) :|| echo $(date)
. preexec
작업을 수행하기 위해 명령줄이 승인될 때마다 명령이 실행됩니다.
의 경우 preexec
전체 $1
명령줄은 변경되지 않습니다. 로 시작하는지 확인 "my-batch "
하고 삭제한 후 나머지는 으로 보냅니다 batch
.
my-batch
이것이 줄의 시작 부분에 있어야 하는 이유를 설명합니다 . 예를 들어 작동하지 않으며 실제로는 로 해석되기 때문에 cmd && my-batch ...
그런 작업을 수행할 수 없습니다 .my-batch foo || bar
:|| foo || bar