가능한 가장 짧은 시간 간격은 0.1로 w
주기적으로 명령을 실행 하고 싶습니다 .man watch
나는 시도했다:
watch -n1 w (works)
watch -n1.5 w (does not work)
watch -n0.1 w (does not work)
watch
n 옵션을 정수가 아닌 값으로 사용하여 명령을 시작 하려고 하면 오류가 발생합니다.
watch: failed to parse argument: '0.1'
답변1
이것은 로케일 문제입니다. 매개변수를 로케일 종속적 으로 변환하려면 로케일 종속을 watch
사용하세요 .strtod(3)
-n
double
-n
이 문제를 해결하려면 다양한 구분 기호를 사용하여 매개변수를 지정 해야 합니다 .
watch -n 0,1 w
또는 마침표 문자를 소수점으로 사용하는 로케일로 변경하십시오.
export LC_NUMERIC=en_US.UTF-8
watch -n 0.1 w
일부 참고자료:
- Linux 맨페이지의 관련 섹션
strtod
:
10진수는 비어 있지 않은 10진수 시퀀스로 구성되며 기수 문자(로케일에 따라 소수점, 일반적으로 ".")를 포함할 수 있습니다.
locale
터미널에서 다음을 실행하여 현재 설정을 볼 수 있습니다.locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" ...
문제의 소스 코드는 gitlab에서 볼 수 있습니다.
https://gitlab.com/procps-ng/procps/blob/85fff468fa263cdd2ff1c0144579527c32333695/watch.c#L625
https://gitlab.com/procps-ng/procps/blob/85fff468fa263cdd2ff1c0144579527c32333695/lib/strutils.c#L49
(2017-09-07 편집): gitlab 링크 업데이트됨
답변2
그냥 보충제Zack의 훌륭한 답변.
두 가지 질문이 있습니다:
LC_NUMERIC=en_US.UTF-8 watch -n 0.1 w
해결 방법으로 watch
숫자 형식을 사용자 규칙에 따라 지정하고 영어 형식으로 지정하려고 합니다.
LC_ALL
설정해도 효과가 없습니다. 해결 방법은 다음LC_ALL
을LC_NUMERIC
사용하는 것입니다.LC_ALL=en_US.UTF-8 watch -n 0.1 w
그러나 이것은 아래의 두 번째 요점을 더 악화시킬 것입니다
watch
(이 경우w
)에 의해 시작된 명령은 이 명령을 상속합니다LC_NUMERIC
. 따라서 사용자가 기대하는 형식으로 숫자가 출력되지 않고 미국 영어 형식으로 출력됩니다.
w
이상적으로는 명령의 동작에 영향을 주지 않고(사용자의 로케일에 관계없이) 10분의 1초마다 시계가 실행되도록 지시하고 싶습니다 w
(항상 사용자가 자신의 로케일에서 이해할 수 있는 출력을 제공해야 함).
yash
셸을 사용하면 다음을 수행할 수 있습니다.
watch -n "$((0.1))" w
yash
부동 소수점 연산을 지원하는 세 가지 Bourne형 쉘 중 하나입니다(나머지는 zsh
및 입니다 ksh93
). 그러나 국제화를 올바르게 수행하는 유일한 제품입니다. zsh
항상 .
소수점 으로 사용되며 ksh93
내부 구문에서 로케일 이벤트의 소수점을 따릅니다.
의 경우 yash
는 .
산술 구문의 소수점이지만 입력/출력에서는 로케일의 소수점을 따릅니다.
여기서 사용할 수 있는 또 다른 비결은 과학적 표기법을 사용하여 소수점 전체를 입력하지 않는 것입니다.
watch -n 1e-1 w
또는 로케일에서 소수점을 쿼리할 수 있습니다.
m=$(locale decimal_point)
watch -n "0${m}1" w
답변3
두 명령은 첫 번째 문자가 동일하다는 점을 제외하면 watch
서로 아무런 관련이 없습니다 w
. 매개변수가 w
동일하게 유효하다고 가정할 수는 없습니다 watch
. 이 watch
명령은 정수 초를 값으로 사용합니다 -n
.
그건 그렇고, 나도 봤어매뉴얼 페이지w
기간에 대한 언급은 보이지 않습니다. (희망적으로) 더 자세히 설명할 수 있도록 이 정보를 어디서 얻었는지 알고 싶습니다.
고쳐 쓰다
watch
실제로 타이머 가 아닌 에 대한 타이머를 의미하신 것 같습니다 w
. 이 새로운 공개 내용과 일치하도록 귀하의 질문을 업데이트하겠습니다. 마침내 이것을 알아 냈고 나는 그것에 아무런 문제가 없다고 생각합니다 watch -n 0.1 w
.