With bash putting a command in <() uses the output of the command as though it were a file. I use it to diff the output of two commands: diff <(command 1) <(command 2)
I've never used it, but I assume >() uses a command as though it were a writable file. So instead of history -a file writing to file, he does history -a >(logger) to write to the logger command. Seems pretty clever to me.
It's called process substitution. In this case it runs the logger command, connects its input to a file in /dev/fd, and places the name of that file in the argument list of history. I've included a small demonstration below. This is useful since the history command won't write to standard out so you can't use a normal pipe. It's more common to see process substitution used to gather output from multiple commands, see http://www.linuxjournal.com/content/shell-process-redirectio...
$ cat writer.sh
#!/bin/bash
if [[ "$#" == 1 ]]; then
echo "Wrote to file named $1" > "$1"
else
echo "Wrote to stdout"
fi
$ ./writer.sh
Wrote to stdout
$ ./writer.sh | cat
Wrote to stdout
$ ./writer.sh >(cat)
Wrote to file named /dev/fd/63
i would be a bit worried about accidental passwords getting into the syslog. i have typed passwords out of habit when they were not required or before a remote system responds only to have the password end up as a bash command. i then have to go into the .bash_history file and remove them.
Agreed - folks who are logged in as root a lot seem to have an uncanny tendency to type all kinds of stuff that probably shouldn't show up in a log anywhere.
These tend to be the same folks who think that using "sudo" is a waste of time and serves no purpose. Not that I've ever accidentally rebooted a box, of course. :P
there is also a library intended to do this.
snoopy logger, can easily be preloaded on linux to make it work without changing the existing applications