Using xargs
did something I didn't quite expect, though I guess it sort of makes sense. This is not what I did, but this is an example which should show what happened.
#!/usr/bin/bash
index=1
for arg in "$@"; do echo "Arg #$index = '$arg'"; let ++index; done
read -p "type something followed by enter: " a
echo "You typed '$a'."
Now here is the command:
echo boo hoo | xargs ./fn.sh
Now what I want is that fn.sh
can read from stdin
to allow user interaction, but that's been usurped by xargs
. I guess I could get xargs
to read from a temporary file, but I was wondering if it can use an unnamed file.
I've never used cygwin, but normally I'd do something like this:
xargs -a <(echo boo hoo) ./fn.sh
-a
tells xargs to read from a file, and the <( )
syntax (which might or might not work with cygwin) is process substitution, which effectively creates a named object (either a named pipe or a path starting /dev/fd
) which can be read, yielding the result of running the enclosed command.
That's not as convenient as pipe syntax, since you have to put the data source in the middle of the xargs
command, but it's otherwise equivalent.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With