Bash-Skript: Ungültiges Argument

Bash-Skript: Ungültiges Argument

Warum kann ich es nicht echo $1 > /sys/class/backlight/acpi_video0/brightnessin 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 -nlöst das Problem.

BEARBEITEN:Außerdem haben Sie möglicherweise das gleiche Problem wie ich: Sie müssen Root sein und sudowerden 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

verwandte Informationen