可能な限り短い時間間隔は、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の素晴らしい答え。
2つの質問があります。
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
しかし、これは以下の2番目のポイントをさらに悪化させるでしょう
watch
(この場合w
)によって開始されたコマンドはこのコマンドを継承しますLC_NUMERIC
。そのため、ユーザーが期待する形式で数値が出力されず、米国英語形式で出力されます。
w
理想的には、コマンドの動作に影響を与えずに(ユーザーのロケールに関係なく)10分の1秒ごとにクロックを実行するように指示したいと思いますw
(常にユーザーが自分のロケールで理解できる出力を提供する必要があります)。
yash
シェルを使用すると、次のことができます。
watch -n "$((0.1))" w
yash
浮動小数点演算をサポートする 3 つの Bourne 型シェルのうちの 1 つ (残りzsh
とksh93
)。しかし、国際化を正しく行う唯一の製品です。zsh
常に.
小数点として使用され、ksh93
内部構文のロケールイベントの小数点に従います。
の場合yash
は.
算術構文の小数点ですが、入力/出力ではロケールの小数点に従います。
ここで使用できるもう1つの秘密は、科学的表記法を使用して小数点全体を入力しないことです。
watch -n 1e-1 w
または、ロケールで小数点を照会することもできます。
m=$(locale decimal_point)
watch -n "0${m}1" w
答え3
2つのコマンドは、最初の文字が同じであることを除いて、watch
互いに関係がありませんw
。パラメータがw
等しく有効であると仮定することはできませんwatch
。このwatch
コマンドは整数秒を値として使用します-n
。
ところで、私も見たマニュアルページw
期間の言及は見えません。 (希望的に)より詳細に説明するために、この情報をどこで入手したかを知りたいです。
修正する
watch
実際にはタイマーではなく、タイマーを意味しているようですw
。この新しい公開内容に合わせてご質問を更新いたします。最後にこれを見つけ、私はそれに問題がないと思いますwatch -n 0.1 w
。