Falsche Ausgabe von $LINENO

F

Fingerhebel

Grünschnabel
Moin zusammen,
ich bin zwar kein absoluter Frischling mehr, was Linux angeht, aber erst seit wenigen Minuten in diesem Forum. Seit einigen Tagen beschaeftige ich mich mit der Shell-Programmierung. Ich verwende die BASH unter Linux Mint 19.3. Dazu habe ich mir das Buch "Shell-Programmierung - Das umfassende Handbuch" von S. Kania und J. Wolf gekauft. Ich bin noch am Anfang und auf ein Problem gestossen, bei dem ich euch um Hilfe bitte.

Folgendes Script habe ich nach Buchanleitung geschrieben:

#!/bin/sh

# Script-Name: prozdat
# Listet Prozessinformationen auf

echo 'Anzahl lauferner Prozesse:'
# ... wc -l zählt alle Zeilen die ps -ef ausgeben würde
ps -ef | wc -l

echo 'Prozessinformationen unserer Shell:'
# ... die Shellvariable $$ enthält die eigene Prozessnummer
ps $$


Anschliessend wird das Script mit
sh -x ./prozdat
ausgefuehrt. Das funktioniert problemlos. Jede Kommandozeile wird mit einem Plus ausgegeben.

Im Folgenden wird das Plus-Zeichen durch den Befehl
export PS4="[Line: $LINENO] "
ersetzt. Und das funktioniert leider nicht, denn anstatt die jeweilige Zeilennummer auszugeben, erscheint wahllos irgendeine, die fuer alle Zeilen gleich ist (siehe Anhang).

Screenshot.png

Ueber eine Loesung oder Anregung, warum die Zeilennummer so ausgegeben wird, wuerde ich mich freuen.

Liebe Gruesse,

Fingerhebel
 
Zuletzt bearbeitet:
Gibt es wirklich keinen Computer-Crack, der mir hier helfen kann?
 
ohne größer drüber nachgedacht zu haben - siehe auch z.B. https://stackoverflow.com/questions...riable-content-in-loaded-exec-file-script-und - wird bei dem export PS4 PS4 1x statisch gesetzt - mit dem aktuellen Wert von $LINENO.

Vermutlich müsste da irgendwas mit eval oder so rein - wobei ich aktuell an der Stelle nicht sagen kann, ob das dort geht (ich würde aber vermuten, daß - analog zu PS1 in den Beispielen z.B. mit pwd auf https://wiki.archlinux.de/title/Bash-Prompt_anpassen es auch mit PS4 gehen sollte)
 
Moin marce,

ich danke dir fuer deine Antwort. Leider sehe ich nicht, wie mir der "eval"-Befehl dabei helfen kann, bzw. an welcher Stelle ich ihn im Script verwenden sollte. Soweit ich es verstanden habe, kann "eval" benutzt werden, wenn zwei (oder mehrere) Kommandos zahlenmaessig entsprechenden Variablen zugeordnet werden und mittels Pipe (|) ausgefuehrt werden sollen. Das ist in dem Script aber nicht vorgesehen.

Trotzdem danke ich dir fuer deine Antwort.

Es piekt mich schon mittelschwer an, dass ein Fachbuch in der 6.(!) Auflage bei einem eigentlich simplen Beispiel solche Fehler beinhaltet... Mmmmmpf

Gibt es sonst noch Ideen oder Vorschlaege?

Ahoi
 
den 2. Link hast Du Dir angeschaut? Bist dabei auf die Zeilen
Code:
PS1='`pwd` >'
und
Code:
PS1=">\033[s\033[1;\$((COLUMNS-4))f\$(date +%H:%M)\033[u"
gestoßen und hast das evtl. bei Dir entsprechend angepasst mal ausprobiert?
 
Zuletzt bearbeitet:
Es tut mir Leid, aber ich sehe den Zusammenhang nicht. PS1 hat etwas mit dem Prompt zu tun. Ich moechte PS4 jedoch zum Debugging verwenden und ihr zwecks Uebersichtlichkeit einen Wert zuweisen, der mir die jeweilige Zeilennummer im Script ausgibt. Sorry, nenn mich daemlich, aber ich stehe auf dem Schlauch.

Liebe Gruesse,
Jan
 
Ob Du PS1, PS4 oder eine Variable namens Fritz, Helga oder Fipsi bearbeitest dürfte eigentlich egal sein.
 
Hehe, danke dir fuer den Hinweis. Dafuer reicht mein mathematisches Verstaendnis gerade noch aus. ;-)

Was soll mir der Link und die dort beschriebenen Beispiele denn aufzeigen? Ich sehe die Verbindung zu meinem Problem nicht.

Cheers
 

Ähnliche Themen

Queue für copy Script

Selbstportierender Code

Zurück
Oben