Recently, we needed to start an application using a script, which application had its own CLI.
After starting it, we had to feed it with some input to configure it before handing it over to the end user.
The application we used was named dog
. We wrote into a plain text file (named food
) the commands that we needed to feed the application and then we started the execution using a plain input redirect like so dog < food;
.
Doing so, resulted into properly feeding the dog
application the food
data but it would cause the application to terminate immediately after the food
was done as it would also feed the EOF
(End Of File
) directive to dog
.
Apparently, the application after receiving the EOF
, it would then terminate without allowing the end user to take control.
To mitigate the problem, we used the cat
command to concatenate the input file along with the stdin
stream, permitting us to first feed all the data in the food
file and then allow the user to input data using the standard input stream.
Our final command resulted in the following solution as below
cat <(cat food) - | dog;
Where -
is the special sign for standard input stdin
.
cat food
can be of course replaced with other commands that produce output on the standard output (stdout
).
A bad side-effect of this solution, is that we lost some functionality of the terminal including, but not limited to, using the backspace and navigation.
This post is also available in: Αγγλικα