Autor Thema: [Gelöst] Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.  (Gelesen 1643 mal)

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
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
« Letzte Änderung: 09 September 2021, 16:32:06 von SKg »

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4995
  • Are we just self-replicating DNA?
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #1 am: 09 September 2021, 13:38:18 »
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:

Zitat
For 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!

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #2 am: 09 September 2021, 13:58:01 »
Hallo,

vielen Dank schon mal an Dr. Boris Neubert


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

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4995
  • Are we just self-replicating DNA?
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #3 am: 09 September 2021, 14:14:50 »
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!

Online Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19664
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #4 am: 09 September 2021, 14:34:12 »
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
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #5 am: 09 September 2021, 14:44:30 »
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

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #6 am: 09 September 2021, 14:55:46 »
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

Offline Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7732
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #7 am: 09 September 2021, 15:17:08 »
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

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4995
  • Are we just self-replicating DNA?
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #8 am: 09 September 2021, 15:18:33 »
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!
Zustimmung Zustimmung x 1 Liste anzeigen

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #9 am: 09 September 2021, 15:34:21 »
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

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4995
  • Are we just self-replicating DNA?
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #10 am: 09 September 2021, 15:36:46 »

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!

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #11 am: 09 September 2021, 15:46:28 »
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

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4995
  • Are we just self-replicating DNA?
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #12 am: 09 September 2021, 15:58:12 »
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!

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Wie bekomme ich den Rückgabewert der Konsole aus dem Skript heraus.
« Antwort #13 am: 09 September 2021, 16:31:22 »
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

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4995
  • Are we just self-replicating DNA?
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!
Zustimmung Zustimmung x 1 Liste anzeigen