ksh93 while read - Schleife

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Condabolyt
Beiträge: 3
Registriert: 22.11.2017 17:13:59
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Berlin

ksh93 while read - Schleife

Beitrag von Condabolyt » 25.02.2021 13:13:31

Hallo,

seit geraumer Zeit arbeitet meine Debian9 ksh93 while read - Schleife nicht mehr.
Die folgende Sequenz zeigt eines meiner Fälle:

Code: Alles auswählen

echo "72700" | while read any_string
do
    echo "$any_string"
    /bin/ls -l /etc/group
    /bin/ls -l /etc/group
    /usr/bin/file /bin/ls
    /bin/cp /etc/group /dev/null
    /usr/bin/wc /etc/group
done

72700
-rw-r--r-- 1 root root 2222 Jan 27 17:17 /etc/group
/bin/ls: /bin/ls: cannot execute [Fehler im Format der Programmdatei]
/usr/bin/file: /usr/bin/file: cannot execute [Fehler im Format der Programmdatei]
/bin/cp: /bin/cp: cannot execute [Fehler im Format der Programmdatei]
/usr/bin/wc: /usr/bin/wc: cannot execute [Fehler im Format der Programmdatei]
Das erste ls - Kommando kann noch ausgeführt werden aber alle weiteren nicht mehr.

Hat jemand eine Erklärung dafür?
In der "bash" und "pdksh" tritt dieses Problem nicht auf.

Benutzeravatar
Meillo
Moderator
Beiträge: 6556
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: ksh93 while read - Schleife

Beitrag von Meillo » 25.02.2021 14:15:09

Sieht mir eher danach aus, wie wenn das weder mit der Schleife noch mit mit der ksh93 etwas zu tun haette. Eher wie wenn das Dateisystem nicht mehr zuverlaessig lesbar waere oder so.

Ist das Verhalten wirklich zuverlaessig reproduzierbar? Passiert es nur in der Schleife? Passiert es auch in gleicher Weise wenn du manche der Befehle weglaesst oder andere einfuehrst? Passiert es auch wenn du keine absoluten Pfade zu den Binaries angibst? usw.

Bei so Problemen muss man meiner Erfahrung nach viel rumprobieren, um irgendwann mal zufaellig ein Muster zu erkennen, den man dann weiter nachgehen kann.


Was ist das im Uebrigen fuer eine ksh93? Bei Debian gibt es kein Paket dafuer.
Use ed(1) once in a while!

Condabolyt
Beiträge: 3
Registriert: 22.11.2017 17:13:59
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Berlin

Re: ksh93 while read - Schleife

Beitrag von Condabolyt » 02.03.2021 00:23:42

Danke Millo!

Das Verhalten ist in meinem Netz zuverlässig reproduzierbar.
Die Dateinamen sind so gewählt, dass der Test auf einer Standard-Linux-Installation mit "cut&paste" reproduzieren sollte.
Das Paket unter Debian heisst nur "ksh", legt aber eine "/bin/ksh93" ab.

Code: Alles auswählen

$ ksh93 --version
  version         sh (AT&T Research) 93u+ 2012-08-01
Diese Versionsangabe erhalte ich auf allen Installationen !

Gegen Fehler im Dateisystem spricht folgendes:
1. es passiert auf allen meinen 9 Debian-9 x86_64 GNU/Linux - Rechnern
2. es passiert nicht:
2.1 nicht mit basch und pdksh
2.2 nicht auf älteren Debian, z.B
nicht auf Linux xxxxx 3.16.0-4-686-pae #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) i686
nicht auf Linux xxxxx 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u3 (2015-08-04) x86_64
2.3 nicht mehr, wenn ich auf den Deban-9-Rechnern eine Kopie der "/bin/ksh93" der älteren Rechnern nutze

Zusammengefasst:
1. Es liegt an der Datei "/bin/ksh93", denn die Lauffähigkeit lässt sich mit ihr auf alle meine Systeme kopieren.
(Der Fehler selbst könnte natürliche auch in einem der System-treuen shared objects liegen)
2. Kopien der lauffähigen ksh93 von älteren Systemen (2017-03-07) (2015-08-04) laufen ohne diesen Fehler auf den Debian-9-Rechnern

Meine nächste Schritte:
1. Debian-10 installieren und dort testen, um eine Lösung zu haben (fremde ksh93 dauerhaft nutzen fällt aus)
2. Ursachenforschung (source compilieren, shared libraries,)
3. Herausfinden was passiert ist, dass ein so klassischer Interpreter einen solchen, unbrauchbaren Zustand annimmt.

Benutzeravatar
Meillo
Moderator
Beiträge: 6556
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: ksh93 while read - Schleife

Beitrag von Meillo » 02.03.2021 07:41:52

Bevor du tiefer in die ksh93 einsteigst, wuerde ich dir empfehlen mehr in dieser Richtung anzusetzen:
Meillo hat geschrieben: ↑ zum Beitrag ↑
25.02.2021 14:15:09
Passiert es nur in der Schleife? Passiert es auch in gleicher Weise wenn du manche der Befehle weglaesst oder andere einfuehrst? Passiert es auch wenn du keine absoluten Pfade zu den Binaries angibst? usw.
Minimalisiere deinen Testcode. Finde raus, woran *genau* in ihm es liegt.

So findet sich, in meiner Erfahrung, am schnellsten die Loesung.
Use ed(1) once in a while!

Condabolyt
Beiträge: 3
Registriert: 22.11.2017 17:13:59
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Berlin

Re: ksh93 while read - Schleife

Beitrag von Condabolyt » 03.03.2021 14:14:32

Fehler passiert auch nach weiterer Reduktion:

Code: Alles auswählen

echo "" | while read any_string
do
    /bin/ls /etc/group
    /bin/ls /etc/group
done
Fehler tritt auch mit ksh93 auf frisch installiertem Debian-10 auf.

Habe das "GitHub"-Team kontaktiert.
Dort ist der Fall bekannt, als Bug schon gelöst aber noch nicht freigegeben.
Dort wurde sogar auf einen Debian-Bug-Report gezeigt, den ich aber zuvor nicht fand.

Inhaltlich ist der Fall für mich nun gelöst. Aber der Weg dorthin war nicht optimal.
Das werde ich verbessern.

Benutzeravatar
Meillo
Moderator
Beiträge: 6556
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: ksh93 while read - Schleife

Beitrag von Meillo » 03.03.2021 16:01:17

Toll! :THX:

Man findet ja nicht so oft Bugs solche in etablierter Software.
Use ed(1) once in a while!

Antworten