Почему я не могу использовать echo $1 > /sys/class/backlight/acpi_video0/brightness
в простом скрипте bash?
Это дает мне ошибку: echo: write error: Invalid argument
.
Попробуйте echo "$1" > /sys/class/backlight/acpi_video0/brightness
.
Могу поспорить, что оболочка расширяет 1 доллар, и, следовательно, echo считает, что она получает кучу аргументов, а не строку.
Этот файл является специальным файлом. Он не может быть записан, если написанное не является только числом. Если вы попытаетесь написать число с помощью 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()
Вы должны проверить, какова действительная стоимость $1
. Эта ошибка означает, что вы пытаетесь записать недопустимое значение - либо оно выходит за пределы диапазона, либо просто не является значимым значением.
На первый взгляд кажется, что он принимает целое число в диапазоне от 0 до 8 (по крайней мере, для меня).
Попробуйте использовать 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