how to prompt a user from a script run with xargs

2020-03-04 08:38发布

问题:

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.

回答1:

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').



标签: bash xargs