Why can't I use Unix Nohup with Bash For-loop?
35,699
Solution 1
Because 'nohup' expects a single-word command and its arguments - not a shell loop construct. You'd have to use:
nohup sh -c 'for i in mydir/*.fasta; do ./myscript.sh "$i"; done >output.txt' &
Solution 2
You can do it on one line, but you might want to do it tomorrow too.
$ cat loopy.sh
#!/bin/sh
# a line of text describing what this task does
for i in mydir/*.fast ; do
./myscript.sh "$i"
done > output.txt
$ chmod +x loopy.sh
$ nohup loopy.sh &
Solution 3
For me, Jonathan's solution does not redirect correctly to output.txt. This one works better:
nohup bash -c 'for i in mydir/*.fasta; do ./myscript.sh "$i"; done' > output.txt &
Author by
Danf
Updated on February 28, 2020Comments
-
Danf about 4 years
For example this line fails:
$ nohup for i in mydir/*.fasta; do ./myscript.sh "$i"; done > output.txt& -bash: syntax error near unexpected token `do
What's the right way to do it?
-
tshepang about 11 yearsUnless
loopy.sh
is in the path, you need to invoke it like./loopy.sh
, at least on this Red Hat system I just tried with. -
Climbs_lika_Spyder over 9 yearsWill this be writing over output.txt for each file? If there is important information in there that you do not want overwritten, I would use
>>
instead of>
. -
Jonathan Leffler over 9 yearsIf I have important data in
output.txt
, I would not run the output of a program into it even in append mode. I would create a new file, and only when I was satisfied that the new data was what I wanted would I append it to the master file. YMMV, of course. -
Brian Hannay over 6 years@JonathanLeffler that doesn't answer the question though. I believe this only truncates once.