Tijdens het schrijven van een script kwam ik iets merkwaardigs tegen. Als ik zoals in onderstaand code block een pipe gebruik in een exec statement, krijg ik later in het script problemen met grep die soms false positives oplevert:
Ik test dit door bovenstaand scriptje met watch uit te voeren: watch -n1 ./test.ksh. Er verschijnt dan random een false positive melding op het scherm, terwijl de returncode van de grep altijd 1 zou moeten zijn
Nu vroeg ik mij af of ik iets vreemds doe, of dat er misschien een bug in de gebruikte ksh versie zit. De gebruikte ksh versie is ksh-20100621-5.el5_8.1 onder RHEL5, ik meen de laatste versie. Onder RHEL6 met ksh versie ksh-20100621-16.el6.x86_64 is dit niet te reproduceren.
Iemand een idee om verder te debuggen?
Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
| #!/bin/ksh # # Command seems irrelevant, using a pipe in the exec # results in a false positive on the greps below # #echo foo | cut -c $(echo bar | grep bar) # FAILS echo foo | grep $(echo bar | sort -u) # FAILS #echo foo | grep $(echo bar) # OK # Greps grep foo /etc/passwd && echo "1: false positive?" grep foo /etc/passwd && echo "2: false positive?" grep foo /etc/passwd && echo "3: false positive?" |
Ik test dit door bovenstaand scriptje met watch uit te voeren: watch -n1 ./test.ksh. Er verschijnt dan random een false positive melding op het scherm, terwijl de returncode van de grep altijd 1 zou moeten zijn
Nu vroeg ik mij af of ik iets vreemds doe, of dat er misschien een bug in de gebruikte ksh versie zit. De gebruikte ksh versie is ksh-20100621-5.el5_8.1 onder RHEL5, ik meen de laatste versie. Onder RHEL6 met ksh versie ksh-20100621-16.el6.x86_64 is dit niet te reproduceren.
Iemand een idee om verder te debuggen?
i5-10600K | MSI MAG Tomahawk Z490 | Asus DUAL GeForce RTX 3070 OC | Corsair Vengeance 32 GB 3600 Mhz | Noctua NH-D15 Chromax.Black | Corsair RM850x | Fractal Design Meshify S2