Ksh: STDOUT und Exitcode sichern

Hallo.

Ich suche nach einer Möglichkeit, sowohl den Standard-Out als auch den Exitcode einer Befehlsausführung zu sichern.
Auf tempfiles kann ich nicht zurückgreifen, da ich keine Annahmen über Parallelinstanzen und Belegung des Filesystems treffen kann.

Im Prinzip war ich schon so weit:

X=`echo "Meine Standardausgabe\nMit Dummy Wert."; echo "\271"$?`; 
echo $X | perl -e '
$W=; 
@A=split("\271",$W); 
print "Exit Code: $A[1]"; 
print $A[0]'

Das tut zwar schon einen guten Teil, nur dummerweise sind so die Linefeeds im STDOUT für die Katz, ich muß auf einen Separator zurückgreifen und außerdem kann es mMn so kompliziert nicht sein - oder?

Gruss,
Michael

Hallo,

Ich suche nach einer Möglichkeit, sowohl den Standard-Out als
auch den Exitcode einer Befehlsausführung zu sichern.

Warum nicht

 2\> sicher; echo $?\>\>sicher

Auf tempfiles kann ich nicht zurückgreifen, da ich keine
Annahmen über Parallelinstanzen und Belegung des Filesystems
treffen kann.

Was genau soll das heißen?

Gruß

Fritze

Hallo,

Auf tempfiles kann ich nicht zurückgreifen, da ich keine
Annahmen über Parallelinstanzen und Belegung des Filesystems
treffen kann.

Was genau soll das heißen?

Vermutlich ist das nur die umständliche Formulierung des Satzes „ich kenne ‚mktemp‘ nicht“.

Gruß,

Sebastian

Vermutlich ist das nur die umständliche Formulierung des Satzes „ich kenne ‚mktemp‘ nicht“.

Das könnte ich wieder umständlich umschreiben mit „mktemp ist keine Solaris Standardapplikation und der Server gehört nicht mir“ - oder kurz „mktemp ist außer Frage“.

Naja, das mit den Parallelinstanzen kriegt mktemp ja in den Griff - von daher mal gucken, ob ich mktemp nicht einfach nachbilden kann.

Gruss,
Michael

Warum nicht

2> sicher; echo $?>>sicher

Weil das Problem ist, dass ich irgendwie sicherstellen muss, nicht in rekursiv geschachtelten Funktionsaufrufen die gleiche Temp-Datei mehrfach zu erwischen.
Außerdem, wenn mehrere Instanzen parallel laufen, dass ich nicht versehentlich das Resultat von A mit dem von B überschreibe (wobei man das ja über pid in den Griff kriegt).

Gruss,
Michael

Vermutlich ist das nur die umständliche Formulierung des Satzes „ich kenne ‚mktemp‘ nicht“.

Das könnte ich wieder umständlich umschreiben mit „mktemp ist
keine Solaris Standardapplikation und der Server gehört nicht
mir“ - oder kurz „mktemp ist außer Frage“.

. :smile:

Naja, das mit den Parallelinstanzen kriegt mktemp ja in den
Griff - von daher mal gucken, ob ich mktemp nicht einfach
nachbilden kann.

http://www.sunfreeware.com/programlistintel8.html#mk…

Eventuell kann man das als User installieren.

HTH,

Sebastian

Gruss,
Michael

1 Like

mal gucken, ob ich mktemp nicht einfach
nachbilden kann.

http://search.cpan.org/dist/File-MkTemp/

http://www.sunfreeware.com/programlistintel8.html#mk…

Eventuell kann man das als User installieren.

Danke schön.

Das „Schöne“ an strikten Firmensicherheitsrichtlinien ist leider, daß es einfacher ist, mal eben x-windows neu zu programmieren als eine formale Erlaubnis zu bekommen, eine noch so triviale Fremdsoftware (selbst von MS/Sun/etc.) zu installieren. :frowning:

Mit dem Sourcecode komme ich allerdings weiter, da man damit nichts installieren muss, was man nicht selbst kompiliert hat. :smiley:

Übrigens habe ich gerade die optimale Lösung gefunden, die mein Problem in der momentanen Fassung vollständig löst:

perl -e "print system(''); "

Gruss,
Michael

Hi,

Ich suche nach einer Möglichkeit, sowohl den Standard-Out als
auch den Exitcode einer Befehlsausführung zu sichern.

Im Prinzip war ich schon so weit:

> X=`echo "Meine Standardausgabe\nMit Dummy Wert."; echo  
> "\271"$?`;  
> echo $X | perl -e '  
> $W=;  
> @A=split("\271",$W);  
> print "Exit Code: $A[1]";  
> print $A[0]'

Ist das nicht… etwas kompliziert?

Warum nicht einfach:

[frank@munin frank]$ cat foo.sh
#!/bin/ksh

result=`grep '^127' /etc/hosts`
echo "Fehler: $?"
echo "Resultat: $result"

result=`grep '^128' /etc/hosts`
echo "Fehler: $?"
echo "Resultat: $result"
[frank@munin frank]$ ./foo.sh
Fehler: 0
Resultat: 127.0.0.1 localhost.localdomain localhost
Fehler: 1
Resultat:
[frank@munin frank]$

HTH,
Gruss vom Frank.