bright.sh
ディスプレイの明るさを手動で調整するために、1行のbashスクリプト()を作成しました。
sudo sh -c 'echo "$1" > /sys/class/backlight/intel_backlight/brightness'
ここでは、端末から輝度値を取得し、echoコマンドにパラメータとして渡します。ただし、スクリプトを実行すると、次の I/O エラーが発生します。
sh: echo: I/O error
端末でパラメータを正常に渡し、明るさを手動で制御するにはどうすればよいですか?使用例は次のとおりです。
./bright.sh 230
ベストアンサー1
$1
スクリプト内のsh -c
最初のコマンドライン引数に展開されます。それスクリプトを最初のコマンドライン引数として呼び出すのではなく、スクリプトを使用します(sh -c
スクリプトが一重引用符で囲まれているため)。
$1
正しい解決策は、呼び出しスクリプトの値をsudo
スクリプトに注入するのではなく(これはあらゆる種類の興味深いコード注入の脆弱性を可能にします)、$1
それを外部スクリプトから内部スクリプトに渡すことです。
sudo sh -c 'printf "%s\n" "$1" > /sys/class/backlight/intel_backlight/brightness' sh "$1"
またはsudo tee
rootとしてファイルに書き込みます。
printf '%s\n' "$1" | sudo tee /sys/class/backlight/intel_backlight/brightness >/dev/null
ファイルに印刷されたデータが常に整数の場合は%d
代わりに。printf
%s