4

Почему я не могу использовать echo $1 > /sys/class/backlight/acpi_video0/brightness в простом скрипте bash?

Это дает мне ошибку: echo: write error: Invalid argument .

4 ответа4

2

Попробуйте echo "$1" > /sys/class/backlight/acpi_video0/brightness .

Могу поспорить, что оболочка расширяет 1 доллар, и, следовательно, echo считает, что она получает кучу аргументов, а не строку.

0

Этот файл является специальным файлом. Он не может быть записан, если написанное не является только числом. Если вы попытаетесь написать число с помощью echo , в конце вы получите символ новой строки. echo -n решает проблему.

РЕДАКТИРОВАТЬ: Кроме того, у вас может быть проблема, которая у меня была; что вам нужно быть пользователем root, и sudo не поможет вам по какой-либо причине, поэтому набирать su очень утомительно; <ваша команда>; exit все время. Для этого я сделал (слишком амбициозный) скрипт на python:

#!/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()
0

Вы должны проверить, какова действительная стоимость $1 . Эта ошибка означает, что вы пытаетесь записать недопустимое значение - либо оно выходит за пределы диапазона, либо просто не является значимым значением.

На первый взгляд кажется, что он принимает целое число в диапазоне от 0 до 8 (по крайней мере, для меня).

0

Попробуйте использовать let

#!/bin/bash

POLKU='/sys/class/backlight/radeon_bl0/brightness'


if [ $# -eq "0" ]
    then
        echo 100 > $POLKU
    else
        let gg=$1
        echo $gg > $POLKU
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .