add exec_cmd to public interface, rather than hide as _exec_cmd