But does the time it takes to launch the subshell equal the amount of time it takes to launch cat? If so your improvement is a NOOP.
The point is a logical improvement anyway (not burying the input argument near the beginning). I'm kind of surprised that the bash folks haven't turned cat into a builtin like they did with time and some of the other coreutils.
It's too bad it's about 30 years too late to stem the tide of shit like cat -v: http://harmful.cat-v.org/cat-v/
Here's cat as a pure sh builtin:
shcat {
for arg in "$@"; do
exec 3<>"$arg"
while read line <&3; do
echo "$line"
done
exec 3>&-
done
}
The shell by it's very nature can't just do exactly one task well, it's a programmable environment for living in. The cancer that's bloating UNIX was the way that the BSD and especially the GNU crews took simple tools and cross-pollinated them randomly with stupid shit. Try running "/bin/true --help" on a GNU system sometime -- there's a damn good reason why "your shell may have its own version of true". % /bin/true --help
Usage: /bin/true [ignored command line arguments]
or: /bin/true OPTION
Exit with a status code indicating success.
--help display this help and exit
--version output version information and exit
NOTE: your shell may have its own version of true, which usually supersedes
the version described here. Please refer to your shell's documentation
for details about the options it supports.
Report bugs to <bug-coreutils@gnu.org>.
I wouldn't necessarily call that 'bloated' unless you feel that any program that uses one bit more than absolutely necessary should be scrapped as 'bloated beyond belief.'> there's a damn good reason why "your shell may have its own version of true".
Because why exactly?