나는 주로 명령줄 사용을 위해 이 작업을 수행하는 더 나은 방법을 원합니다.
while sleep 60; do
mysql -e 'show processlist';
done
이것은 다음보다 낫습니다:
while mysql -e 'show processlist'; do
sleep 60;
done
...a를 입력하면 ctrl-c
중지되기 때문입니다. 그러나 첫 번째 버전은 처음으로 출력하기 전에 1분 정도 기다립니다.
에 대해 알고 있습니다 watch
. 일반적으로 좋지만 모든 상황에 적합하지는 않습니다. 저주하지 않고 stdout으로 간단한 출력을 찾고 있습니다. watch
옵션이 있으면 좋을 것 같습니다 --stdout
.
여기서는 단순함이 핵심입니다. 나는 mysql 문의 오류 처리에 관심이 없습니다. 자체 오류를 표준 출력으로 보고할 수 있습니다.
답변1
Ctrl+는 C정상적인 상황에서 전체 루프를 종료합니다. 신호는 전체 전경 프로세스 그룹으로 전송됩니다.
당신은 찾고있을 수 있습니다
while mysql -e 'show processlist' && sleep 60; do :; done
한 번 종료 mysql
하거나 sleep
실패하면 종료합니다.
답변2
이것은 당신에게 도움이 될 수 있습니다:
trap "pkill -TERM -P $$" SIGINT
while [ 1 ]; do
mysql -e 'show processlist'
sleep 60
done
답변3
글쎄, 당신의 예를 들면 ...
n=; while sleep "$((n&(n=60)))"
do mysql...
done
...할 거예요. 처음에만 수행 sleep 0
하고 나머지 부분에서도 수행합니다 sleep 60
. 그래도 최종 목표를 달성하기 위해서는 이보다 더 좋은 방법이 있을 것이라고 생각합니다.
이와 같은 것을 사용한다면 아마도 함수에서 사용하고 싶을 것입니다.
every_minute() ( n=
while sleep "$((n&(n=60)))"
do "$@"; done)
...또는 한 줄로...
every_minute() (n=; while sleep "$((n&(n=60)))"; do "$@"; done)
쉘의 rc 파일에 이와 같은 것을 넣으면 다음과 같이 할 수 있습니다.
every_minute mysql "$whatever" "$args" "$you" "$use"
...또는 프롬프트에 한 줄 버전을 입력하고 쉘이 닫힐 때까지 계속 사용할 수 있습니다.