整数以外の時間オプションでwatchコマンドを呼び出すことはできません。

整数以外の時間オプションでwatchコマンドを呼び出すことはできません。

可能な限り短い時間間隔は、0.1で定期的にwコマンドを実行したいと思います。man watch

私は試した:

watch -n1 w        (works)
watch -n1.5 w      (does not work)
watch -n0.1 w      (does not work)

watchn オプションを整数以外の値として使用してコマンドを開始しようとすると、エラーが発生します。

watch: failed to parse argument: '0.1'

ベストアンサー1

これはロケールの問題です。パラメータをロケール依存に変換するには、ロケール依存をwatch使用します。strtod(3)-ndouble

-nこの問題を解決するには、さまざまな区切り文字を使用してパラメータを指定する必要があります。

watch -n 0,1 w

または、ピリオド文字を小数点として使用するロケールに変更します。

export LC_NUMERIC=en_US.UTF-8
watch -n 0.1 w


いくつかの参考資料:

  1. Linuxのマンページの関連セクションstrtod

10進数は空でない10進数のシーケンスで構成され、基数文字(ロケールに応じて小数点、通常「.」)を含めることができます。

  1. 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"
    ...
    
  2. 問題のソースコードは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リンクを更新しました

おすすめ記事