3 ms·
My understanding is that they can. stdin, stdout and stderr are just pipes assigned to file descriptors 0,1 and 2 by convention. There's nothing stopping a prog
by nicoburns 5y ago
My understanding is that they can. stdin, stdout and stderr are just pipes assigned to file descriptors 0,1 and 2 by convention. There's nothing stopping a program from having more file descriptors passed in, and some programs do. There's no just no standard convention on how to do it.
- matheusmoreira 5y ago> My understanding is that they can. stdin, stdout and stderr are just pipes assigned to file descriptors 0,1 and 2 by convention. Yes. Standard input and output are so ubiquitous shells were entirely designed around them with syntax that allows you to work with them implicity. > There's nothing stopping a program from having more file descriptors passed in, and some programs do. Can you please cite examples? I've never seen any software do that. > There's no just no standard convention on how to do it. Yeah. Such conventions would be nice. Perhaps a plan9 style virtual file system for all programs... program/ input/ x y output/ x+y x-y
- gnubison 5y ago> Can you please cite examples? I've never seen any software do that. Well, almost no one actually says “input is read from fd 0 (stdin) and 4”, for example. Generally you say “input is read from file1 and file2”, and then the user can pass “/dev/fd/0 /dev/fd/4” as arguments. This copes better when the parent process doesn’t want to close any of its inherited file descriptors.
- DangitBobby 5y agoHere's an example of how you would allow reading from stdin by using a different descriptor (3) for the input you're iterating over. I knew this was possible mainly because I also recently needed to receive user input while iterating over file output in bash. https://superuser.com/a/421713 https://superuser.com/a/421713
- mkdirp 5y ago> Can you please cite examples? I've never seen any software do that. With `gpg --verify` you can specify which file descriptor you want it to output to. I've previously used it to ensure a file is verified by a key that is trusted ultimate. Something that otherwise requires outputting to a file. Something like this: tmpfifo="$(mktemp -u -t gpgverify.XXXXXXXXX)" gpg --status-fd 3 --batch --verify "$sigFile" "$file" 3>"$tmpfifo" grep -Eq '^\[GNUPG:] TRUST_(ULTIMATE|FULLY)' "$tmpfifo" || exit 1 GPG also has `--passphrase-fd`. Possibly other option too.