私がしたいこと
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文字が印刷されます。