how to prompt a user from a script run with xargs
bash, xargs
Solution
If the option `-a` is given to `xargs`, the arguments will be read from a file instead of stdin. You can use bash's process substitution with the syntax `<( ... )` to create the file on the fly.
xargs -a <( echo A B C ) bash -c 'for x in "$@"; do echo $x; read; done'
Note that here`$@`misses the first argument ('A' in this case). This is because `bash -c` puts 'A' into `$0` (which normally takes the name of the script file), and `$@` provides `$1`, `$2` etc... (in this case 'B' and 'C').
Problem
I'm using xargs to populate the arguments to a script in which I want to stop the script, waiting for user input. Something like: ``` echo a b c | xargs bash -c 'for a in "$@"; do echo $a; read; done' ``` but the `read` gets ignored. It seems that the second script is trying to get it's input from the pipe too? I've tried `xargs -p` but it's no better.