Unfortunately, that is the way I am being told to do it.
The way you are being told to do it is not only wasting a lot of resources but also dangerous and easily broken by unexpected (yet legal) sets of input data. RudiC was absolutely correct in his suggestion and i will try to explain the concept to you. Be prepared, though, it has absolutely nothing to do with subshells. I suggest you get yourself a good book about programming your shell (probably ksh or bash) and start reading.
Quote:
Originally Posted by RudiC
The shell accepts its input in "fields": parts which form distinct entities. You rely implicitly on this mechanism when you enter
because something has to tell the shell that "5000" is the first argument and "/etc/passwd" is the second. The reason is obvious: there is a blank in between. So, the blank character splits field1 (the first argument) from field2 (the second argument). Now consider the following:
This will search for the string "5000 /etc/passwd" in a file named "/some/other/file". The double quotes have prevented the field splitting (or - just another way to put it - stripped from the blank character the ability to split fields). We notice that the field splitting character - the correct term is "internal field separator" or IFS for short - can be redefined.
In fact there is an environment variable "IFS", which defines the IFS character. It is possible to redefine it by simply changing its value:
will set the splitting character from " " to "X". Usually we want such a behavior only for a very limited part of our script (otherwiseXweXwouldXhaveXtoXuseX"X"sXinsteadXofXblanks) and fortunately it is possible to redefine the environment for only one command (this is as close to the concept of subshells as it will get). This is what RudiC did:
This reads a line and puts the content of field1 into variable "UN", field2 into "X", field3 into "UID", etc.. "field" now is not something sepearated by blanks but by colons - exactly the format the file /etc/passwd is written.
RudiC now put this in a while-loop to circle through all the lines in the file:
This will execute the while-loop for as long as <command> returns "TRUE". Once it returns something else the loop is aborted. Note that the whole loop has a redirected input: it gets fed the content of /etc/passwd. This is passed to the read-command, one line for every pass of the loop. When the end of the file is reached, read will return FALSE and the loop will be aborted.
Notice that all remaining parts (regardless of how many fields the line may consist of) are stored into the last variable. Try the following and notice the difference:
Once you have made sure all the variables hold the values you expect them to hold replace the echo ...-statements by some code which does whatever you want.
Hi all,
I have a shell script which calls other shell scripts, depending on the input.
Within a.sh, I have a command which calls b.sh (ie. ksh b.sh)
Normally, we use the exit function to terminate a shell. However, if I choose to call exit from b.sh, I will return to the parent shell who... (4 Replies)
Hi All,
I am going through the semaphore concept and have a doubt regarding the same and hope to get a resolution here.
I have a file which has a number of records.
I want to write an application (in C) which will be able to do concurrent read/write on these records.
Of what I have... (8 Replies)
Hi all
This is my first thread here.i confused with the concept of thread.Can anyone tell me this concept in detail.my Quation may be at primary level.
Thanx in advance for help. (1 Reply)
I have the following script running with nohup on one of my servers:
#!/bin/bash
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
#set log number
#i=1
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
#Check if log exits, if so incrememnt log number up so we don't clobber
#while... (8 Replies)
Hi all,
This is the basic question.
I have read many books which advised to avoid creating sub shells.
e.g: use wc -l<filename
rather than using cat file|wc -l.
So, how to identify whether a command creates subshell or not?
so,is it better to use tail -n+1 file in stead of using cat.... (3 Replies)
Hi Gurus,
Please help me in below requirement.
Instance =5 (it is user parameter)
total=52 (it is user parameter
i need to split this to 5 and reminder as 1 instances totally 6
for example i need to splitt to each
52/5=10.4
1-10
11-20
21-30
31-40
41-50 (2 Replies)
Hi there,
Everyone knows that errexit is NOT inherited by subshells. But does anyone know why errexit still appears as set with set +o?
The following example highlights the fact that errexit appears set in a subshell (set +o) even though it's actually unset (it does NOT exit with false).
$... (0 Replies)
So i have a script that is like this:
#!/bin/sh
VARA="elementary 1
elementary 2
nursery A
nursery B
highschool AZ"
echo "${ContentOfADifferentSCRIPT}" | sh
i do not have control over the script that is inside the variable "${ContentOfADifferentSCRIPT}".
however, i know that the... (3 Replies)