[Gelöst] Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.

Begonnen von SKg, 09 September 2021, 13:30:13

Vorheriges Thema - Nächstes Thema

SKg

Hallo,

Ich habe ein Skript mit folgenden Inhalt:

#!/bin/bash
sudo echo "abc" >> /home/pi/test.txt

echo


Ich weiß wenn ich diese Zeilesudo echo "abc" >> /home/pi/test.txt im Terminal ausführe bekomme ich einen Fehler und zwar:
-bash: /home/pi/test.txt: Keine Berechtigung

das ist soweit richtig weil die Datei für alle nur Leseberechtigung hat.

Wenn ich das Skript ausführe bekomme ich diese Fehlermeldung nicht.
Wie bekomme ich die Fehlermeldung aus dem Skript als Rückgabewert?
Was muss ich an "echo" übergeben.


MFG
Stephan

Dr. Boris Neubert

Hallo,

die Fehlermeldung landet auf stderr, während die Ausgabe auf stdout geht.

In der Bash-Man-Page gibt es den Abschnitt REDIRECTION. Die relevante Passage:

ZitatFor example, the command

              ls > dirlist 2>&1

       directs both standard output and standard error to the file dirlist, while the command

              ls 2>&1 > dirlist

       directs only the standard output to file dirlist, because the standard error was duplicated from the standard output before the standard output was redi‐
       rected to dirlist.

Also würde ich mal

sudo echo "abc" >> /home/pi/test.txt 2>&1

versuchen. Es kann noch sein, dass Du

(sudo echo "abc" >> /home/pi/test.txt) 2>&1

schreiben musst, um die Ausgabe von sudo mit umzuleiten.

Viele Grüße
Boris

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

SKg

Hallo,

vielen Dank schon mal an Dr. Boris Neubert

Zitat von: Dr. Boris Neubert am 09 September 2021, 13:38:18

Also würde ich mal

sudo echo "abc" >> /home/pi/test.txt 2>&1

versuchen. Es kann noch sein, dass Du

(sudo echo "abc" >> /home/pi/test.txt) 2>&1

schreiben musst, um die Ausgabe von sudo mit umzuleiten.


Ich habe die Zeilen direkt so ins Skript eingetragen.
#!/bin/bash
sudo echo "abc" >> /home/pi/test.txt 2>&1


#!/bin/bash
(sudo echo "abc" >> /home/pi/test.txt) 2>&1


Hat beides nicht funktioniert.

MFG
Stephan

Dr. Boris Neubert

Was bedeutet, dass es nicht funktioniert hat? Was ist das erwartete Ergebnis? Wie ist das Skript in FHEM eingebunden?
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Otto123

Hallo Stephan,

Hilft dir vielleicht das hier https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html

Also unter der Vermutung Du willst es irgendwie in fhem haben.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

SKg

Hallo,

@Dr. Boris Neubert

aktuell rufe ich das Skript noch garnicht in Fehm auf weil es erst noch im Terminal funktionieren soll.

Im Skript steht bis jetzt folgendes:
#!/bin/bash
sudo echo "abc" >> /home/pi/test.txt


Wenn ich das Skript im Terminal aufrufe dann passiert das:

pi@Bergha-pi:~$ sudo sh /opt/fhem/test.sh
pi@Bergha-pi:~$


ich hätte aber das erwartet:
-bash: /home/pi/test.txt: Keine Berechtigung
pi@Bergha-pi:~$


Wenn ich das Skript dann später in Fhem ausführe:

my $wert=qx(sudo sh /opt/fehm/test.sh)


dann hätte ich gern das "-bash: /home/pi/test.txt: Keine Berechtigung" in $wert steht.

@Otto123

Ja, den Beitrag habe ich schon 3xgelesen aber irgendwie finde ich die Syntax für meinen Anwendungsfall nicht.


MFG
Stephan

SKg

Hallo,

@Otto123

Wen ich in der Fhem Kommandozeile folgendes eingebe:
{qx(sudo echo "abc" >> /home/pi/test.txt)}

dann bekomme ich nichts zurück geliefert obwohl es einen Fehler mit der Schreiberechtigung auf "test.txt" gibt.

MFG
Stephan

Wernieman

Da ein mit qx aufgerufenes Script FHEM blockiert, würde ich Dir einen anderen Weg empfehlen.

Pushe vom Script die Daten zu FHEM.

Und noch etwas:
Ob etwas geklappt hat oder nicht, sieht man in der "errorvariable" $?
Für eine Pipe: https://stackoverflow.com/questions/1550933/catching-error-codes-in-a-shell-pipe

Wenn ich mich nicht irre, reicht sudo den Status durch ... aber diese Angabe ist OHNE GARANTIE
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Dr. Boris Neubert

Hallo Stephan,

ich bin verwirrt. FHEM wird doch vermutlich als User fhem ausgeführt. Im Terminal rufst es als pi auf. Und dann ist noch unklar, ob fhem sudo darf, wem die Testdatei gehört, und welche Rechte sie hat.

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

SKg

Hallo,

@Werniman

wenn ich das Skript so schreibe:#!/bin/bash
sudo echo "abc" >> /home/pi/test.txt


echo $?


#!/bin/bash
sudo echo "abc" >> /home/pi/test.txt


echo "$?"


dann wird immer "0" zurückgegeben obwohl es ein Fehler gab.

MFG
Stephan

Dr. Boris Neubert

Zitat von: SKg am 09 September 2021, 15:34:21

wenn ich das Skript so schreibe:#!/bin/bash
sudo echo "abc" >> /home/pi/test.txt


echo $?


dann wird immer "0" zurückgegeben obwohl es ein Fehler gab.

Die erste Syntax ist ausreichend. Woher weißt Du, dass ein Fehler da war? Ich habe das im Terminal nachgestellt und bekomme zuverlässig eine 1, wenn die Test-Datei die Maske 004 hat.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

SKg

Hallo,

@Dr. Boris Neubert

bei mir hat die Datei die Maske 444
Das "abc" landet nicht in der Datei und der Rückgabewert des Skriptes ist 0


MFG
Stephan

Dr. Boris Neubert

Verstehe ich nicht.

Habe mir das Skript als s.sh nachbastelt:

#!/bin/bash
sudo echo "abc" >> /tmp/t.txt


echo $?

/tmp/t.txt hat Maske 444 und gehört mir.

Wenn ich das Skript laufen lasse, kommt
./s.sh: Zeile 2: /tmp/t.txt: Keine Berechtigung
1

Hmm.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

SKg

Hallo,

ich habe das Problem gefunden, "es sitzt 1m entfernt vor dem PC"

ich habe das Skript immer mit "sudo" ausgeführt, dann scheint es so zu sein als würde immer eine 0 zurückgegeben.

Hier mal die eingaben mit Ergebnisse, die Dateiberechtigung ist für test.txt 444 und für das Skript ist 744 eingestellt.

pi@Bergha-pi:~$ sh /home/pi/test.sh
/home/pi/test.sh: 3: /home/pi/test.sh: cannot create /home/pi/test.txt: Permission denied
2
pi@Bergha-pi:~$ sudo sh /home/pi/test.sh
0
pi@Bergha-pi:~$


Das ist leider ne dumme Angewohnheit von mir überall "sudo" davor zu packen.
Sorry für den Umweg.

Vielen Dank nochmal an alle beteiligten.

MFG
Stephan

Dr. Boris Neubert

Gut, Stephan, dass Du Dein Problem lösen konntest.

Ich hoffe, dass Du mit den Hinweisen von Wernieman, Otto und mir auch eine gute Integration in FHEM hinbekommst.

Viele Grüße
Boris

(und Danke, fürs auf "Gelöst" stellen).
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!