Bug 450172

Summary: Gawk 3.1.3 while bug
Product: Red Hat Enterprise Linux 4 Reporter: Christopher <christopher.geen>
Component: gawkAssignee: Jan Zeleny <jzeleny>
Status: CLOSED NOTABUG QA Contact: Brock Organ <borgan>
Severity: medium Docs Contact:
Priority: low    
Version: 4.6CC: rchidamb
Target Milestone: rc   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2010-03-05 16:47:57 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Christopher 2008-06-05 17:25:01 UTC
Description of problem:
In Gawk version 3.1.3 strings can not be expanded within a while loop.

Version-Release number of selected component (if applicable):
3.1.3

How reproducible:
Always

Steps to Reproduce:
1. Create a simple awk script. For example:
#!/usr/bin/gawk -f
# test.gawk
BEGIN {
   comm="-al";
   while("/bin/ls "comm | getline >0){
      print 
   }
}
2. Run the script. ./test.gawk
  
Actual results:
garbage

Expected results:
listing of what's in my run directory

Additional info:
This works for any string in the while loop with variables.
For example comm="w"; while( "ps -e" comm "f" | getline >0){ also does not work.
An easy fix is to resolve the string before the loop, for example:
joe="ps -e" comm "f"
while( joe | getline >0){

This works fine in RedHat Enterprise 3.8 with Gawk 3.1.1

-Chris

Comment 1 Didar Hossain 2008-07-30 11:22:10 UTC
Use parentheses around the string concatenation to get this working. Not
using parentheses makes the expression ambiguous.

Reference:
htte://www.gnu.org/manual/gawk/html_node/Getline_002fPipe.html#Getline_002fPipe


Comment 2 Didar Hossain 2008-07-31 20:31:02 UTC
Here is the right way to do it with the original script -

#!/usr/bin/gawk -f
# test.gawk
BEGIN {
   comm="-al";
   while(("/bin/ls "comm) | getline >0){
      print 
   }
}

Notice the parentheses in the expression in the "while" condition.

- Didar

Comment 3 Jan Zeleny 2010-03-05 16:47:57 UTC
Since this has been already solved in previous comments, I'm closing this as NOTABUG.