Warum kann ich es nicht echo $1 > /sys/class/backlight/acpi_video0/brightness
in einem einfachen Bash-Skript verwenden?
Es wird mir der Fehler angezeigt: echo: write error: Invalid argument
.
Antwort1
Versuchen echo "$1" > /sys/class/backlight/acpi_video0/brightness
.
Ich wette, die Shell erweitert $1 und daher denkt Echo, dass es eine Reihe von Argumenten und nicht einen String empfängt.
Antwort2
Diese Datei ist eine spezielle Datei. Sie kann nicht beschrieben werden, wenn das Geschriebene nicht nur eine Zahl ist. Wenn Sie versuchen, eine Zahl mit zu schreiben echo
, erhalten Sie am Ende ein Zeilenumbruchzeichen. echo -n
löst das Problem.
BEARBEITEN:Außerdem haben Sie möglicherweise das gleiche Problem wie ich: Sie müssen Root sein und sudo
werden Ihnen aus irgendeinem Grund nicht helfen, was es sehr mühsam macht, ständig su
; <Ihr Befehl>; einzugeben. Dafür habe ich ein (übertrieben ehrgeiziges) Python-Skript erstellt:exit
#!/usr/bin/python
from sys import *
PATH = "/sys/class/backlight/intel_backlight/brightness"
if len(argv) != 2:
print("Usage: bright.py <brightness>")
exit()
try:
brightness = int(argv[1])
if not 0 <= brightness <= 825:
raise Exception()
except:
print("<brightness> must be an integer between 0 and 825.")
exit()
if brightness == 0:
readString = raw_input("A value of 0 will turn off your screen. Are you sure you want to continue? [y/N] ")
if readString != "y":
exit()
elif brightness <= 5:
with open(PATH, "r") as f:
oldBrightness = int(f.read())
if brightness < oldBrightness:
readString = raw_input("A value of %i will make your screen very dark. Are you sure you want to continue? [y/N] " % brightness)
if readString != "y":
exit()
try:
with open(PATH, "w") as f:
f.write(str(brightness))
except:
print("Failed to write to file. Are you root?")
exit()
Antwort3
Sie sollten den tatsächlichen Wert überprüfen $1
. Dieser Fehler bedeutet, dass Sie versuchen, einen ungültigen Wert zu schreiben – entweder liegt er außerhalb des zulässigen Bereichs oder ist einfach kein sinnvoller Wert.
Auf den ersten Blick scheint es, dass es eine Ganzzahl im Bereich 0 bis 8 akzeptiert (zumindest für mich).
Antwort4
Versuchen Sie es mitlet
#!/bin/bash
POLKU='/sys/class/backlight/radeon_bl0/brightness'
if [ $# -eq "0" ]
then
echo 100 > $POLKU
else
let gg=$1
echo $gg > $POLKU
fi