Shell-Script
如何“懶惰”地讀取 xrandr 的輸出?
我有一個 bash 腳本,用於調整
xrandr --verbose
用於獲取目前亮度的顯示器亮度。它工作得很好,但xrandr
在我的機器上使用有點慢,你可以在這裡看到:[PROMPT REDACTED]$ time xrandr --verbose # xrandr output omitted for brevity real 0m0.976s user 0m0.003s sys 0m0.002s
這會輸出很多我不需要的資訊,除了需要將近一秒鐘的時間。我真正需要的輸出中唯一一行是
Brightness: X
. 我目前正在使用這條線從中獲取價值:BRIGHTNESS=`xrandr --verbose | grep -i brightness | cut -f2 -d ' ' | head -n1`
旁注:
head
最後呼叫是因為我有 2 個顯示器,所以我最終得到 2 個值,但只需要 1 個,因為我將它們保持在相同的亮度。由於我只需要來自 的那一行
xrandr --verbose
,我想知道是否有一種方法可以“懶惰地”評估它,方法是:
xrandr
到達該行後停止輸出xrandr
閱讀該行後忽略其餘輸出- 還有什麼?
我意識到 bash 可能不是最適合這個的語言,所以我也願意接受其他語言的解決方案。
讓我們嘗試在第一次發現 時停止並忽略
brigthness
。從grep
手冊頁:-m NUM, --max-count=NUM Stop reading a file after NUM matching lines.
這是我的最終版本。請注意,我們甚至不需要
head
:BRIGHTNESS=`xrandr --verbose | grep -m 1 -i brightness | cut -f2 -d ' '`
您可以使用
awk
刪除一些管道(程序)並只讀取文件,直到遇到亮度的第一個實例:xrandr --verbose | awk '/Brightness/ { print $2; exit }'