A more concise way of writing what Hennes suggested is
(sleep 5; echo foo) &
Alternatively, if you need more than a few seconds, you could use
at. There are three ways of giving a command to
$ echo "ls > a.txt" | at now + 1 min warning: commands will be executed using /bin/sh job 3 at Thu Apr 4 20:16:00 2013
Save the command you want to run in a text file, and then pass that file to
$ echo "ls > a.txt" > cmd.txt $ at now + 1 min < cmd.txt warning: commands will be executed using /bin/sh job 3 at Thu Apr 4 20:16:00 2013
You can also pass
atcommands from STDIN:
$ at now + 1 min warning: commands will be executed using /bin/sh at> ls
Then, press CtrlD to exit the
lscommand will be run in one minute.
You can give very precise times in the format of
[[CC]YY]MMDDhhmm[.ss], as in
$ at -t 201412182134.12 < script.sh
This will run the script
script.sh at 21:34 and 12 seconds on the 18th of December 2014. So, in theory, you could use
at to run something five seconds in the future. However, that is kinda like using a tank to swat a fly, and Hennes’s suggestion is better.
You can work around it by starting a shell or a script in the background.
/bin/sh -c "sleep 5 ; echo foo" &  63791 > Active shell prompt here foo 5 second later output appears.