Named pipe does not wait until completion in bash

2019-01-29 07:19发布

In the following test.jl creates an output.txt and generates some console output. console output is very well handled. but control returns immediately after echo even before output.txt is created completely. placing a wait in between echo and mv causes an indefinite wait. Should a carriage return be passed to the pipe without killing the pipe yet?

mkfifo pipe
sleep 1000000 > pipe &
julia <pipe >stdout.txt 2>stderr.txt &

echo "include(\"test.jl\")" > pipe
mv output.txt temp/
echo "include(\"test2.jl\")" > pipe

Thanks!

1条回答
看我几分像从前
2楼-- · 2019-01-29 07:44

I understand that test.jl and test2.jl both write to output.txt so you have to move the file to another directory before running test2.jl or test2.jl expects output.txt in temp/ directory and you have to move it there before text2.jl runs.

If yes then the following code should solve the problem:

mkfifo pipe
sleep 1000000 > pipe &
julia <pipe >stdout.txt 2>stderr.txt &

echo "include(\"test.jl\")" > pipe
echo "mv(\"output.txt\", \"temp/\")" > pipe
echo "include(\"test2.jl\")" > pipe

In this way Julia runs mv command and you make sure that it is executed after test.jl but before test2.jl.

But actually we are getting to a point where it would be better to write a Julia script named e.g. script.jl:

include("test.jl")
mv("output.txt", "temp/")
include("test2.jl")

and run it using julia script.jl.

查看更多
登录 后发表回答