入力した文字列を eshell を起動して実行させたいんですが、
次のように read-string を使うと、execute-kbd-macro が正しく動きません。

(defun foo ()
(interactive)
(let (var)
(setq var (read-string "% "))
(execute-kbd-macro (concat "\370eshell
" var "
"))))

read-string を使わずに (setq var "ls") などと書くと正しく動作します。
どうやったら read-string で入力したのを eshell で実行できるんでしょうか?