Потому что они встроены в оболочку, а не являются программами сами по себе.
Самое простое, что нужно сделать, это вызвать оболочку и передать команду с помощью опции -c:
> bash -c pwd
/home/foo/bar/baz
... или на Java:
Runtime.getRuntime().exec("bash -c pwd")
... или, в более общем случае:
Runtime.getRuntime().exec(new String[]{"bash", "-c", command});
Нам нужно использовать вариант String [], в противном случае наша команда будет искажена StringTokenizer, если она содержит какие-либо пробелы.