|
|
|||||||||
|
|||||||||
| |||||||||
|
|
|
| |||||||||
![]() |
|
|
«
Previous Thread
|
Next Thread
»
|
Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
Stop making mediocre tutorials.The best tutorials are video! Camtasia Studio makes it easy to create engaging, buzz-building screen videos at any size, in any popular format. Download the free trial!
|
|
#1
|
|||
|
|||
|
What does EOF do?
Hi
I saw this script and I'm not sure why or how it works: cat >> test << STOP line 1 line 2 line 3 STOP or equally cat >> test << EOF line 1 line 2 line 3 EOF Is this an OS issue or a bash issue? Can anyone help explain this to me. Thanks Dan |
|
#2
|
||||
|
||||
|
That is known as a "Here Tag". Basically it tells the shell that you are going to enter a multi-line string until "Here". You could call it anything you want, not just EOF or STOP.
Code:
[mb@ironmaiden mb]$ cat > test <<HERE > Hello > world > HERE The <<HERE part tells the shell that you're going to enter multi-lines until the HERE tag. Thus the shell waits until it sees HERE to consider the rest of the stuff above it as input for cat. Some rules about the Here tags: 1. The tag can be any string, uppercase or lowercase, though most people use uppercase by convention. 2. The tag will not be considered as a Here tag if there are other words in that line. In this case, it will merely be considered part of the string. The tag should be by itself on a separate line, to be considered a tag. 3. The tag should have no leading or trailing spaces in that line to be considered a tag. Otherwise it will be considered as part of the string. Here's another chunk to consider: Code:
[mb@ironmaiden mb]$ cat >> test <<HERE > Hello world HERE <--- Not the end of string > This is a test > HERE <-- Leading space, so not end of string > and a new line > HERE <-- Now we have the end of the string Note that in the above, we have the word HERE showing up 3 times. The first two times, it occurs with other words or leading spaces and hence it is considered as part of the string. Many scripting languages (perl, PHP, awk, ruby etc.) support the concept of the "Here tag", so it isn't unique to bash alone.
__________________
Up the Irons What Would Jimi Do? Smash amps. Burn guitar. Take the groupies home. "Death Before Dishonour, my Friends!!" - Bruce D ickinson, Iron Maiden Aug 20, 2005 @ OzzFest Down with Sharon Osbourne Puzzle of the Month solved by sizeablegrin, etienne141 and L7Sqr, superior C/C++ programmers of the month |
|
#3
|
|||
|
|||
|
what does EOF do?
Hey thanks for that. Much appreciated.
All of it makes sense. Although why does the following work? cat <<EOF>> filename how is that order isn't important, I mean I could have : cat >> filename <<EOF and this would still work, how does bash know where to start from? Thanks for your help with this. Dan |
|
#4
|
||||
|
||||
|
That's because when you enter the command, bash parses the first line and sees that it needs to run cat and redirect the output to a file called filename. It also sees that the input is going to come from STDIN (i.e. the terminal) and that it should read input until it sees your "here" tag. The bash parser can accept input/output redirection operators in any order really.
|
![]() |
| Viewing: Dev Shed Forums > Programming Languages - More > Other Programming Languages > What does EOF do? |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|
|
|
|