2010-12-22 6 views
0

Dies ist für UNIX-Shell-Programmierung. Es muss von mehreren UNIX-Plattformen wie Solaris, Linux und AIX unterstützt werden.Wie bewerten Sie die von sed/grep/whatever bereitgestellten Textstrings?

Ich habe dieses Szenario - ich bin aus einer Textdatei eine Zeichenfolge zu lesen, die möglicherweise eine Umgebungsvariable enthält oder nicht enthalten kann, die möglicherweise oder nicht definiert werden. Zum Beispiel:

<foo.bar> This error code was found: $(error_code) 

Ich habe den folgenden Code:

statement=$(sed -n $1'p' $messagefile) 
echo $echo_flag $statement 

$ 1 = Zeilennummer auf dieses spezielle Funktion/script geliefert.
$ messagefile = Dateiname der Protokolldatei.
$ echo_flag = "-e" in Linux, sonst leer.
$ (error_code) = 42.

Statt dies immer beim Laufen:

<foo.bar> This error code was found: 42 

das ich immer noch:

<foo.bar> This error code was found: $(error_code) 

Wie genau kann ich feststellen, das Shell-Skript, dass der Wert der Aussage sollte weiter darüber hinaus bewertet werden, was sed getan haben?

+0

Ich habe dreimal gelesen, aber ich muss sagen, ich habe nicht verstanden, was Sie sagen. –

Antwort

0

Ich bin nicht sicher, dass ich verstehe, was Sie fragen, aber würde die echo Befehl zu eval echo $echo_flag $statement tun, was Sie wollen?

+0

Das einzige Problem dabei ist, dass '$ (error_code)' wie Befehlssubstitution anstatt einer Variablen aussieht und einen Fehler erzeugen wird. Eine weitere Analyse müsste durchgeführt werden, bevor Sie ein "Eval" machen könnten. –

1

Es ist bedauerlich, dass der Eingabetext $ (error_code) als Syntax verwendet, weil das wie Prozesssubstitution für die Shell aussieht. "Eval" ist näher an dem, was Sie wollen, aber es ist auch ein Sicherheitsrisiko, benutzergesteuerte Eingaben zu machen und diese direkt auszuführen.

Dieser Fehlercode gefunden wurde: rm -rf/

Was Sie tun müssen, würden, ist die Eingabezeile für die erwartete Syntax zu analysieren und den „error_code“ Token selbst, Test für einen in-scope verarbeiten shellvar, print modifizierte Ausgabe usw.