# Shell-Befehle ausführen

Diese Funktion ermöglicht es Ihnen, Shell-Befehle oder vollständige Shell-Skripte auf dem Gerät auszuführen. Alle Befehle werden mit root-Rechten ausgeführt. Um auch mit langlebigen Skripten kompatibel zu sein, unterstützt diese Funktion auch Skripte, die im Hintergrund laufen und nicht beendet werden.

## Vordergrund-Befehlsausführung

Sie können es wie unten gezeigt verwenden, um schnell einen Befehl oder ein Skript auszuführen. Dieser Vorgang blockiert den aktuellen Prozess, daher sollte die Ausführungszeit Ihres Skripts oder Befehls nicht zu lang sein. Es ist für die Ausführung von kurzlebigen Skripten (innerhalb von 0-10 Sekunden) gedacht.

```python
cmd = d.execute_script("whoami")
```

```python
>>> d.execute_script("notexist")
exitstatus: 127
stderr: "mksh: <stdin>[2]: notexist: inaccessible or not found\n"
```

Die Ausgabe enthält den Rückgabestatuscode sowie die Standardausgabe und die Standardfehlerausgabe.

```python
print (cmd.stdout)
print (cmd.stderr)
print (cmd.exitstatus)
```

```python
>>> result = d.execute_script("id")
>>> print (result.stdout)
b'uid=0(root) gid=0(root)\n'
>>> print (result.stderr)
b''
>>> print (result.exitstatus)
0
```

## Hintergrund-Befehlsausführung

Die Hintergrund-Befehlsausführung wird für Skripte mit langer Laufzeit verwendet. Um zu verhindern, dass der Speicher durch Endlosschleifen oder unendliche Skriptausgaben überlastet wird, kann das Ergebnis von Hintergrundskripten nicht direkt abgerufen werden. Wenn Sie die Ausgabe des Skripts benötigen, leiten Sie diese bitte innerhalb des Skripts in eine Datei um.

Der folgende Aufruf führt ein langlebiges Skript `sleep` aus und gibt eine SID-Zeichenkette zurück, die die ID dieses Hintergrundskripts ist.

```python
script = "sleep 100; exit 0;"
sid = d.execute_background_script(script)
```

Sollte sich das Skript unerwartet verhalten, können Sie es mit dem folgenden Aufruf zwangsweise beenden, während es im Hintergrund läuft.

```
d.kill_background_script(sid)
```

Mit dem folgenden Aufruf können Sie anhand der SID überprüfen, ob das Hintergrundskript bereits beendet wurde.

```python
d.is_background_script_finished(sid)
```

```python
>>> script = "sleep 100; exit 0;"
>>> sid = d.execute_background_script(script)
>>> print (sid)
ba06da93-c3aa-4457-b90e-247e42a16207
>>> d.is_background_script_finished(sid)
False
>>> d.kill_background_script(sid)
True
>>> d.is_background_script_finished(sid)
True
```