ループ実行プログラムの出力切り捨て

ループ実行プログラムの出力切り捨て

私がしたいこと

xkb-switch -Wレイアウトグループが変更されるまで無限に待機し、グループ名を標準出力に印刷するプログラムの出力を切り取りたいです。私は出力の最初の2文字に興味があるので、それを使って切り取りたいと思いますcut -c1-2

私が達成したいこと

ここで本当に達成したいのは、i3blocksを使用してi3列に現在のキーボードレイアウトを表示することです。しかし、xkb-switchがレイアウト言語(最初の2文字)だけを出力するわけではないので、行の長さを変更したくありません。 、レイアウトバリエーションも興味がありません。現在私のブロックは次のとおりです。

[keymap]
label=
command=bash -c 'xkb-switch;xkb-switch -W'
interval=persist

私が試したこと

xkb-switch -W > foo & while inotifywait -qe modify foo; do cut -c1-2 foo; done

私はxkb-switchの出力がファイルにリダイレクトされるこのオネライナを設定し、inotifywaitを使用してファイルの変更を待っている間にcutを呼び出して、私が得たい2つの文字を出力しようとしました。

しかし、もともと予想したように、xkb-switchによってファイルが破壊されず(これがうまくいかない理由を理解します)、inotifywaitが」改訂する「ファイルが変更されると、これは私が望んでいません。後者はある種のリダイレクトを介して変更できるようです。しかし、私が試してみるのが最善のアプローチではないようです。

ベストアンサー1

ここで重要なものを見逃しているか、最も簡単な解決策はあまりにも明らかです。なぜ通常のパイプを使用しないのですか?

xkb-switch -W | cut -c1-2

xkb-switch改行文字が出力されると、各出力行の最初の2文字が印刷されます。

おすすめ記事