Command-Line

無法使用非整數時間選項呼叫 watch 命令

  • September 7, 2017

我想w定期啟動命令,根據man watch最小可能的時間間隔是0.1。

我試過:

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'

這是一個語言環境問題。watch使用strtod(3)(取決於語言環境)將參數轉換-n為 a double

要解決此問題,您需要使用-n不同的分隔符指定參數:

watch -n 0,1 w

或者將您的語言環境更改為使用句點字元作為小數點的設置:

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

幾個參考:

  1. Linux 手冊頁的相關部分strtod

十進制數由可能包含基數字元的非空十進制數字序列組成(小數點,取決於語言環境,通常為“.”)

  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"
...
  1. 有問題的原始碼可以在 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 連結

引用自:https://unix.stackexchange.com/questions/193226