I had the below input file and a script whose logic was to process each line of the input file. Within the logic, I needed to perform an OS command such as the “more /etc/oratab” command below.
Contents on the input file:
[server_name] more temp.txt a b c
Code
#! /bin/bash function perform_logic { echo '***' temp=`more /etc/oratab | grep -i dean | wc -l` } while IFS=',' read -r service lsnr port do echo $service $lsnr $port perform_logic done < temp.txt
I was expecting three lines of output; one for each line in the input file. However, the output was:
[server_name] ./temp.ksh a *** [server_name]
Basically processing stops after the first line of the input file. The issue is that the “more /etc/oratab” is overlaying the standard input/output of the while command. After I changed the code to:
#! /bin/bash function perform_logic { echo '***' temp=`more /etc/oratab | grep -i dean | wc -l` } while IFS=',' read -r –u3 service lsnr port do echo $service $lsnr $port perform_logic done 3< temp.txt
Now the output displays that all lines of the input file are processed:
[server_name] ./temp.ksh a *** b *** c *** [dt2ompd2-splunk2] #! /bin/bash clear function perform_logic { echo '***' temp=`more /etc/oratab | grep -i dean | wc -l` } while IFS=',' read -r -u3 service lsnr port #while IFS=',' read -r service lsnr port do echo $service $lsnr $port perform_logic done 3< temp.txt #done < temp.txt [dt2ompd2-splunk2] ./temp.ksh a *** [server_name]