I have a script that takes a list of servers from an input file one by one and executes some commands on each server. I want to be able to update the input file while this script is running, without affecting the input of the first process, and re-run the script with the second list of servers. Can this be done safely?
When you run a command like
file > my_script the contents located at
file are piped into
my_script (as a file descriptor). This decouples the contents from the name, meaning you can immediately modify/replace
file in another process.
If you instead run a command like
my_script file you're passing the name "file" to
my_script, which may read from that file at any point (or write to it, delete it, etc.), thus you can't safely change
file while the script is running. Notably this doesn't happen immediately; a long running process might not read from
file until much later, after you've already edited the file.
Therefore if you design your program to read from stdin you can safely modify the input file and re-run the command while the first process is still running.