Batch No such file or directory, obwohl Datei da ist.

Bender86

Lieutenant
Dabei seit
Jan. 2007
Beiträge
688
Hallo miteinander!

Ich habe mir eben ein kleines Script geschrieben, das beim Systemstart ausgeführt sicherstellen soll, dass einige Werte in Dateien richtig gesetzt sind. (Da diese manchmal zurückgesetzt werden) Das Script sieht so aus:

Code:
put_values() {
  echo 86 >| /sys/devices/platform/smapi/BAT0/stop_charge_tresh
  echo 86 >| /sys/devices/platform/smapi/BAT1/stop_charge_tresh
  echo 76 >| /sys/devices/platform/smapi/BAT0/start_charge_tresh
  echo 76 >| /sys/devices/platform/smapi/BAT0/start_charge_tresh
}

put_values
exit
Wenn ich es nun zum testen auführen will bekomme ich:

Code:
$ sudo ./set-loading-borders.sh
./set-loading-borders.sh: line 9: /sys/devices/platform/smapi/BAT0/stop_charge_tresh: No such file or directory
./set-loading-borders.sh: line 10: /sys/devices/platform/smapi/BAT1/stop_charge_tresh: No such file or directory
./set-loading-borders.sh: line 11: /sys/devices/platform/smapi/BAT0/start_charge_tresh: No such file or directory
./set-loading-borders.sh: line 12: /sys/devices/platform/smapi/BAT0/start_charge_tresh: No such file or directory
Die Dateien sind aber vorhanden:

Code:
$ cat /sys/devices/platform/smapi/BAT0/stop_charge_thresh
86
$ cat /sys/devices/platform/smapi/BAT0/start_charge_thresh
76
(funktioniert analog auch für die anderen 2 Dateien)
Kann mir jemand sagen warum die Dateien nicht gefunden werden wenn ich auf sie im Script zugreifen will?

Viele Grüße,
Bender
 

Boron

Commander
Dabei seit
Sep. 2001
Beiträge
2.784
Ich vermute das liegt an dem komischen Operator >|, den du nutzt.
Du meinst bestimmt nicht "In Datei schreiben mit Pipe".
Versuche also mal so etwas
Code:
echo 86 > /sys/devices/platform/smapi/BAT0/stop_charge_tresh
Es fehlt das Pipe-Zeichen.

Ich denke nämlich, dass deine Shell versucht zuerst die 86 in die Datei zu schreiben und dann die 86 per Pipe der Datei zu übergeben. Diese ist aber nicht ausführbar und das verursacht die Meldung.
Um das zu verifizieren gib mal
Code:
echo 99 | /sys/devices/platform/smapi/BAT0/stop_charge_tresh
ein. Jetzt sollte die Fehlermeldung auch kommen. Allerdings bleibt die 86 von vorhin in der Datei bestehen. Sie sollte nicht verändert werden.
 
Zuletzt bearbeitet:

Bender86

Lieutenant
Ersteller dieses Themas
Dabei seit
Jan. 2007
Beiträge
688
Also wenn ich den Pipe Operator wegmache wie du vorgeschlagen hast bekomme ich dieselbe Fehlermeldung, dass es die Datei nicht gäbe. Ein normales

Code:
sudo echo 86 > /sys/devices/platform/smapi/BAT0/stop_charge_thresh
bash: /sys/devices/platform/smapi/BAT0/stop_charge_thresh: Permission denied
Geht irgendwie nicht, sondern nur wenn ich als root ein echo mache. Eine Sache die ich irgendwie nicht verstehe, denn wenn ich die Datei mit "sudo nano" öffne kann ich Werte hineinschreiben. Ein "sudo echo" gibt mir aber ein permission denied. :freak:
 

Bender86

Lieutenant
Ersteller dieses Themas
Dabei seit
Jan. 2007
Beiträge
688
Wie meinst du das?

Also es ist mit den (allen 4) Dateien so:

- Wenn ich sie mit "sudo nano" öffne, kann ich neue Werte hineinschreiben und speichern, alles prima.
- Wenn ich mit "sudo echo WERT > DATEI" einen Wert hineinschreiben will, bekomme ich ein "permission denied".
- Wenn ich erst in den root-User wechsel und dann ein "echo WERT > DATEI" mache, funktioniert das.

Nun im Script:
- Wenn ich im Script "echo WERT > DATEI" stehen habe und es mit "sudo script.sh" ausführe, bekomme ich die genannte Fehlermeldung, dass die Datei nicht existiere. (Sie existiert aber definitiv)
- Wenn ich in den root-User wechsel und das Script dann ausführe genau dasselbe.

Das verwirrt mich ein wenig.. :freak:
 
Top