Problem with read in sh


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Problem with read in sh
# 1  
Old 07-27-2006
Problem with read in sh

I've discovered a very annoying problem in sh:
Code:
echo -en "one\ntwo\nthree" | while read VALUE
do
        echo "${VALUE}"
done

This will print one and two, but not three. The last line is IGNORED because it lacks a newline. This makes it hard to use sh for things like CGI scripting; you have to add a newline with sed or something. How can I coerce read into reading the last line?
# 2  
Old 07-27-2006
For me it's printing..perfectly.
one
two
three
# 3  
Old 07-27-2006
Works in ksh an sh on my box as well.

Do you have IFS set to something wierd?
# 4  
Old 07-27-2006
I haven't changed the value of IFS. What version of echo do you have? The version I use implements the '-n' flag, which prevents it from printing the final newline, like so:
Code:
 # echo -n "Hello"
hello#

If yours does not have -n, the example won't fail.

I am using GNU bash 3.1.16.
# 5  
Old 07-27-2006
Just confirming that this is the behaviour under GNU bash for me also.

I have a question, I'm sure there is a reason you want to do it this way, but why use the -n if piping to another command in the way you describe?
# 6  
Old 07-28-2006
It's just an example. The real problem is getting bash to read POST input from the CGI interface, which is fed into stdin and also has no trailing newline. Right now I have to do crazy manipulations with sed and exec. With enough work I can probably find less crazy ways, but all of them involve launching a new process instead of using a builtin, which annoys me to no end.
# 7  
Old 07-28-2006
I've discovered part of the reason.
Code:
#!/bin/sh

while read LINE
do
        echo "${LINE}"
done

echo "${LINE}"

Code:
# echo -en "hello\nworld" | ./readtest.sh
hello
world
#

GNU bash returns error on EOF, even when there was some data. I'll just have to test for empty strings.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Read -p problem

Hi, :) I tried to make of "line returns" with "\n" : read -p $'Do you really want append this line in '$CONFIG_FILE''\n'IP CLIENT: '$IP_INPUT' - PATH: '$PATH_INPUT''\n'y/n ?:' CONFIRM_INPUT But it didn't work, please anyone have an idea? :b: (2 Replies)
Discussion started by: Arnaudh78
2 Replies

2. Programming

help: problem with sockets write/read

I am trying to make a server and client, the client will choose between some options and the server will react accordingly. After a some reads and writes that work the server needs to read from client an INT i use this: read(newSd,&k,sizeof(int));But even if all the other times there was no... (1 Reply)
Discussion started by: theSling
1 Replies

3. Shell Programming and Scripting

Array; while read line do problem

Hi - I don't understand why the following script isn't working. I want to read the contents of a while loop into an array, but it looks like the array is destroyed once the while loop is finished. Can anybody help? someFile: PC_1 wf_test1 Test PC_2 wf_test2 Test PC_3 wf_test3 Test Script:... (3 Replies)
Discussion started by: lt1776
3 Replies

4. Shell Programming and Scripting

Problem with read line

Hi everybody, I am new to shell script. Please help me with this problem. I have a file test.txt with the content like this: I have a shell script test.sh like this #!/bin/sh while read line do echo $line >> out.txt done < test.txt out.txt is expected to have the same content... (10 Replies)
Discussion started by: Dark2Bright
10 Replies

5. Shell Programming and Scripting

Problem to read archive

Dear all, I have this archive: cat file.txt archive test 02 sequence 03 02length 52 archive test 02 sequence 04 02length 52 archive test 02 sequence 05 02length 52 teste arquivo 06 sequencia 08 06 length 54 teste arquivo 06 sequencia 09 ... (8 Replies)
Discussion started by: cewa67
8 Replies

6. Shell Programming and Scripting

problem with read command

Hi Guys, I am just trying to read data from a file. The command i tried worked well with AIX server. But in SunOS, it is not reading. cat log.out |sed -n '4,4p'| read value; + sed -n 4,4p + cat log.out + read value echo $value; + echo This is the log of running the script. ... (13 Replies)
Discussion started by: mac4rfree
13 Replies

7. Shell Programming and Scripting

While Read problem

Hello, I have this simple script while read name do ssh $name "hostname > /tmp/$name.txt" ssh $name "/opt/ignite/bin/print_manifest | grep Main >> /tmp/$name.txt" ssh $name "getconf MACHINE_SERIAL >> /tmp/$name.txt" ssh $name "ioscan -kfnC processor | grep processor | wc -l >>... (3 Replies)
Discussion started by: Andyp2704
3 Replies

8. Programming

Problem in read() from a pipe

Hi, Can any one please help me with this. Am struggling hard to get a solution. I am doing telnet through a C program and getting the stdout file descriptor of the remote machine to pipe. read() function is getting data, But whenl it receives SOH character ie. ^A ( Start of heading = Console... (2 Replies)
Discussion started by: JDS
2 Replies

9. Shell Programming and Scripting

SH script problem with read

Hi, I'm doing a script that reads lines from a file and then copy them to another file, if the user wants it. But I'having problems to get the user selection because when I do the read to ask the user, the script reads the next line of the file. The script looks like this: #!/bin/sh # ... (2 Replies)
Discussion started by: pmpx
2 Replies

10. Shell Programming and Scripting

read after pipe problem OSX10.4

I use read often in scripts to filter the right part into a variable like: $ print "abc cde efg" | read k l ; print "k=$k, l=$l" k=, l= This works on linux and unix versions I work with. On OSX 10.4 this doesn't work. I found a workaround but would like to know why the original line... (5 Replies)
Discussion started by: relyveld
5 Replies
Login or Register to Ask a Question