Funktion und Dateiabhängigkeit eines Shell-Skripts ermitteln?

8

Ich suche nach einer Möglichkeit, ein Shell-Skript zu verarbeiten, um folgendes zu bestimmen:

  1. welche Befehle, Skripte oder Funktionen im Skript aufgerufen werden.
  2. auf welche Dateien das Skript zugreift (r oder w).

Es muss nicht durch die Abhängigkeiten recurse, einfach auflisten, was es direkt ausführt. Ich könnte wahrscheinlich etwas schreiben, das das selbst macht, aber es muss vorher gemacht worden sein ... Ich finde es einfach nicht.

    
mathtick 13.10.2010, 18:44
quelle

3 Antworten

5

Sie können 'strace' verwenden, um ein Skript auszuführen und alles zu sehen, was das Skript und seine Unterprozesse tun, einschließlich Suchen und Öffnen von Dateien. Zum Beispiel:

%Vor%

Ich habe eine Menge anderer Aktivitäten (Öffnen von Systembibliotheken, Nachschlagen von Gebietsschemadaten und vielem mehr) getrimmt. Weitere Informationen zu den Optionen finden Sie unter "man strace". -f, -o und -e sind die, die ich am häufigsten benutze.

    
Jim Blandy 09.11.2010 22:42
quelle
1

Es wird ein Feature des Loker Projekts sein, das ich derzeit entwickle. Für den Moment ist der Parser fast vollständig und Sie können eine vernünftige Approximation von dem, was Sie wollen, zusätzlich implementieren. Im Allgemeinen ist diese Aufgabe jedoch sehr komplex, da der Name des Befehls aus der Variablenerweiterung, der Feldaufspaltung usw. resultieren kann.

Wenn du beschreibst, wofür du das brauchst und welche Art von Skripten du parsen willst, werde ich sagen können, wie viel deiner Bedürfnisse Loker jetzt befriedigen kann.

Als Alternative haben einige Versionen von bash --rpm-requires -Option, die auch etwas Ähnliches macht.

    
Roman Cheplyaka 13.10.2010 21:14
quelle
0

Das geht in einer so dynamischen Sprache nicht, Ihr statisches Analysewerkzeug ist nicht zuverlässig und vermisst eine Reihe von Abhängigkeiten. Betrachten Sie den folgenden Code:

%Vor%

Dies ist kein verschachteltes Beispiel; Vor kurzem habe ich in einer Produktionsumgebung eine ausgefeiltere Version mit Parametern hinzugefügt.

Wenn Sie wirklich statische -Analyse benötigen, sollten Sie keine dynamische Sprache verwenden, sie sind einfach inkompatibel miteinander. Dasselbe gilt für jede andere funktionale Sprache, in der Funktionen als Argumente übergeben werden: Die statische Analyse kann die Werte von Argumenten nicht praktisch vorhersagen.

Selbst in einer sehr statischen und einfachen Sprache wie Java können Sie der statischen Analyse immer noch ausweichen, wenn Sie sich anstrengen und Reflexion verwenden. Reflektion ist jedoch umständlich und nicht weit verbreitet, daher ist die Java-Analyse in der Praxis sehr nützlich: siehe Eclipse etc ..

    
MarcH 10.11.2010 23:40
quelle

Tags und Links