Redirecting stdout problem


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Redirecting stdout problem
# 1  
Old 06-20-2012
Redirecting stdout problem

I have a simple bash script that prints sth every 5 seconds. What I do is the following. I redirect the output of the script to a file, tail the file and see that it works and then from another console I delete the file where the output is redirected to. Even though I have deleted the file, the tail still works. Stoping the tail and starting it again of course fails because the file is not found.
My question is whether this is normal and does the output go "somewhere" after deleting the file where it is supposed to be redirected.

Best,
Iliya
# 2  
Old 06-20-2012
The file still exists until everything with it open, closes it or quits.

Try truncating it, i.e. overwriting it with nothing, instead of deleting it. Having it open can't prevent that from happening, and tail -f is usually smart enough to seek back to the beginning.

Code:
: > filename

# 3  
Old 06-20-2012
Yes,
the open file descriptors that refer to the deleted file remain (there will be an unnamed file).

Consider the following example (this is on Linux):

Code:
zsh-4.3.17[t]% zsh -c 'while :; do sleep 3;date ; done > outfile'&
[1] 1470
zsh-4.3.17[t]% ls -l /proc/1470/fd
total 0
lrwx------ 1 drado drado 64 Jun 20 23:08 0 -> /dev/pts/2
l-wx------ 1 drado drado 64 Jun 20 23:08 1 -> /home/drado/t/outfile
lrwx------ 1 drado drado 64 Jun 20 23:08 10 -> /dev/pts/2
lr-x------ 1 drado drado 64 Jun 20 23:08 11 -> /dev/null
lrwx------ 1 drado drado 64 Jun 20 23:08 12 -> /dev/pts/2
lrwx------ 1 drado drado 64 Jun 20 23:08 2 -> /dev/pts/2
zsh-4.3.17[t]% tail -f /home/drado/t/outfile
Wed Jun 20 23:08:08 CEST 2012
Wed Jun 20 23:08:11 CEST 2012
Wed Jun 20 23:08:14 CEST 2012
Wed Jun 20 23:08:17 CEST 2012
Wed Jun 20 23:08:20 CEST 2012
Wed Jun 20 23:08:23 CEST 2012
^C
zsh-4.3.17[t]% rm /home/drado/t/outfile
zsh-4.3.17[t]% tail -f /home/drado/t/outfile
tail: cannot open `/home/drado/t/outfile' for reading: No such file or directory
zsh-4.3.17[t]% tail -f /proc/1470/fd/1
Wed Jun 20 23:08:14 CEST 2012
Wed Jun 20 23:08:17 CEST 2012
Wed Jun 20 23:08:20 CEST 2012
Wed Jun 20 23:08:23 CEST 2012
Wed Jun 20 23:08:26 CEST 2012
Wed Jun 20 23:08:29 CEST 2012
Wed Jun 20 23:08:32 CEST 2012
Wed Jun 20 23:08:35 CEST 2012
Wed Jun 20 23:08:39 CEST 2012
Wed Jun 20 23:08:42 CEST 2012
Wed Jun 20 23:08:45 CEST 2012
^C
zsh-4.3.17[t]% lsof -p1470|fgrep outf
zsh     1470 drado    1w   REG  252,0      630  261137 /home/drado/t/outfile (deleted)
zsh-4.3.17[t]% kill -9 %1
zsh-4.3.17[t]%
[1]  + killed     zsh -c 'while :; do sleep 3;date ; done > outfile'

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Redirecting stdout inside a loop

hi, OK. I am writing a bash script, and it is almost working for me. Problem 1: I currently have stout sent to a file (stout.miRNA.bash.$date_formatted) which I would like to have work inside my loop, but when I move it, it just prints to the screen. Problem 2: I have a second file... (18 Replies)
Discussion started by: hmortens
18 Replies

2. Shell Programming and Scripting

Redirecting stdion, stdout within an AT command

Hello, I'm strugling with some redirecting and all help is apreciated. The following program is working as expected, but the result of the AT command doesn't go to any file. Thanks in advance for the help. #!/bin/bash modem=/dev/ttyUSB1 file=/root/imsi.txt # print error to stderr and exit... (4 Replies)
Discussion started by: cleitao
4 Replies

3. Shell Programming and Scripting

Redirecting stdout continously to a file

I have a C program that continously outputs info to stdout. The problem is that I am redirecting the stdout and stderr to a file and stdout is written at the end of the problem rather than continously to the file. This could be a problem if for example the program is killed and the stdout output is... (3 Replies)
Discussion started by: igurov
3 Replies

4. Shell Programming and Scripting

Redirecting stdout on background task

Hello, I have a script (videostream.sh) which invokes the GStreamer command-line tool gst-launch with all the correct command line parameters. When I invoke this program, I add the '&' character at the end to make it a background task, so that my script can complete and exit, i.e. gst-launch... (1 Reply)
Discussion started by: salukibob
1 Replies

5. Shell Programming and Scripting

Redirecting stdout to variable while printing it

Hi everybody, I am trying to do the thing you see in the title, and I can't simply do a=$(svn up) echo $a because the program (svn) gives output on lots of lines and in the variable the output is stored on only one line (resulting in a horribly formatted text). Any tips? Thanks,... (2 Replies)
Discussion started by: ocirne94
2 Replies

6. Shell Programming and Scripting

redirecting to stdout in betwen command

can anyone help me in making singleline command for Capital Letters are folders ,small letter are files X,Y,Z are subfolders of A as shown below A - X,Y,Z Folder X has three files a.txt,b.txt,c.txt similarly Y,Z. as shown below X- a.txt,b.txt,c.txt Y- a.txt,b.txt,c.txt Z-... (4 Replies)
Discussion started by: phoenix_nebula
4 Replies

7. UNIX for Dummies Questions & Answers

Redirecting several outputs to /dev/stdout

I have an executable that, depending on its input, outputs to either one file or several. It usually prints nothing on screen. The usual way to call this program is to specify an input and output filenames, like this: ./executable.exe -i inputfile -o outputfileIt will then try to use the output... (1 Reply)
Discussion started by: aplaydoc
1 Replies

8. Shell Programming and Scripting

Redirecting part of output to stdout

Hi, I am trying to execute a command like this: find ./ -name "*.gz" -exec sh -c 'zcat {} | awk -f parse.awk' \; >> output If I want to print the filename, i generally use the -print argument to the find command but when I am redirecting the output to a file, how can I print just the... (2 Replies)
Discussion started by: Legend986
2 Replies

9. Shell Programming and Scripting

implicitly redirecting stdout to a file

Is there a way to redirect all stdout to a file implicitly - like defining stdout=/home/me/process.log - so that all "echo" commands in several scripts/subscripts are written to that file; instead of having to edit all scripts to redirect the "echo" (e.g. echo 'This is a test ' >>... (1 Reply)
Discussion started by: ALTRUNVRSOFLN
1 Replies

10. Shell Programming and Scripting

redirecting STDOUT & STDERR

In bash, I need to send the STDOUT and STDERR from a command to one file, and then just STDERR to another file. Doing one or the other using redirects is easy, but trying to do both at once is a bit tricky. Anyone have any ideas? (9 Replies)
Discussion started by: jshinaman
9 Replies
Login or Register to Ask a Question