GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Behebung des „Exec-Formatfehlers“ beim Ausführen von Skripts mit dem Befehl „run-parts“.

Als ich versuchte, alle Skripte in einem Verzeichnis auszuführen Beim Verwenden des Befehls run-parts stieß ich auf einen Fehler - "run-parts:failed to exec script.sh:Exec format error" . Die Skripte funktionierten einwandfrei, wenn ich sie wie "./script.sh" und "sh script.sh" direkt ausführte. Aber sie funktionierten nicht, als ich sie mit dem Befehl run-parts ausführte. Für diejenigen, die sich fragen, führt der Befehl run-parts alle Skripte in einem Verzeichnis aus. Wenn Sie beim Ausführen eines Skripts einen solchen Fehler erhalten, hilft Ihnen dieser kurze Tipp, den „Exec-Formatfehler“ zu beheben, wenn Sie Skripts mit dem Befehl „run-parts“ unter Linux ausführen.

Behebung des „Exec-Formatfehlers“ beim Ausführen von Skripten mit dem Befehl „run-parts“

Um alle Skripte im Ordner „Dokumente“ auszuführen, habe ich Folgendes ausgeführt:

$ run-parts --regex '^s.*\.sh

Ich bekomme folgende Fehlermeldung:

run-parts: failed to exec Documents/script1.sh: Exec format error
run-parts: Documents/script1.sh exited with return code 1
run-parts: failed to exec Documents/script2.sh: Exec format error
run-parts: Documents/script2.sh exited with return code 1
run-parts: failed to exec Documents/script3.sh: Exec format error
run-parts: Documents/script3.sh exited with return code 1
run-parts: failed to exec Documents/script4.sh: Exec format error
run-parts: Documents/script4.sh exited with return code 1

run-parts:Fehler beim Ausführen von script.sh:Exec-Formatfehler

Um den "Exec-Formatfehler" zu beheben, müssen Sie einen Shebang hinzufügen am Anfang Ihrer Skripte, damit der Kernel weiß, wie er sie ausführen soll. Für diejenigen, die sich fragen, ein Shebang ist die Zeichenfolge, die aus den Zeichen Nummernzeichen besteht und Ausrufezeichen (#! ) am Anfang eines Skripts. Wenn Sie den Shebang am Anfang einer Textdatei hinzufügen, wird er als ausführbare Datei interpretiert.

Die meisten Skripte beginnen mit einem Shebang. Hier sind einige typische Shebang-Beispiele.

Bourne-Shell , oder eine kompatible Shell:

#!/bin/sh

Bash:

#!/bin/bash

Perl:

#!/usr/bin/perl

Python 2.x:

#!/usr/bin/python

Python 3.x:

#!/usr/bin/python3

Das nennen wir Shebang.

Kommen wir nun zurück zum Thema. Bearbeiten Sie Ihre Skripte mit Ihrem bevorzugten Editor:

$ nano Documents/ostechnix.sh

Fügen Sie den folgenden Kram am Anfang des Skripts hinzu:

#!/bin/sh

„Exec-Formatfehler“ beim Ausführen von Skripten mit Run-Parts behoben

Jetzt können Sie die Skripte mit dem Befehl run-parts ohne Probleme mit dem Befehl run-parts ausführen.

Aktualisierung:

Als einer unserer Leser Mr.Danesh im Kommentarbereich unten erwähnt, Anstatt den Pfad des Interpreters fest zu codieren, z. B.

#!/usr/bin/python3

Wir können verwenden:

#!/usr/bin/env python3

Dies ist tragbarer falls der Interpreter in einem anderen (nicht standardmäßigen) Verzeichnis installiert ist. env ist ein Shell-Befehl für Linux und Unix-ähnliche Betriebssysteme. Es wird oft von Shell-Skripten verwendet, um den richtigen Interpreter zu starten.

Sie können auch ShellCheck verwenden Dienstprogramm, um Probleme in Ihren Shell-Skripten zu finden.

  • ShellCheck – Ein kostenloses Dienstprogramm zum Auffinden von Fehlern in Ihren Shell-Skripten
HerunterladenKostenloser Leitfaden:„Erweiterter Bash-Scripting-Leitfaden“

Hoffe das hilft.


Linux
  1. Arbeiten mit Eingabeausgabe und Fehlerumleitung in Linux

  2. Fix FirewallD läuft nicht unter Linux Mint 12

  3. Best Practices beim Ausführen von Node.js mit Port 80 (Ubuntu / Linode)

  4. Fehler bei der Verwendung von Git Credential Helper mit gnome-keyring als Sudo

  5. Linux-Befehlsverlauf mit Datum und Uhrzeit

So beheben Sie Konvertierungsfehler mit Calibre

Undistract-me :Erhalten Sie eine Benachrichtigung, wenn lang andauernde Terminalbefehle abgeschlossen sind

Beheben Sie den Fehler, dass der Befehl hwmatch auf Grub nicht gefunden werden kann

Setzen Sie einen Timer auf Ihre laufenden Befehle mit dem Timeout-Befehl in Linux

Linux-exec-Befehl mit Beispielen

Warum erhalte ich einen Exec-Formatfehler, wenn ich meinen Linux-Dienst schreibe?