Shell-Script

如何“懶惰”地讀取 xrandr 的輸出?

  • August 30, 2019

我有一個 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 }'

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