可能な限り短い時間間隔は、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リンクを更新しました