[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Pascal J. Bourguignon
Mon, 07 Dec 2009 11:13:10 +0100
Gnus/5.1008 (Gnus v5.10.8) Emacs/22.3 (darwin)
Andreas Roehler <address@hidden> writes:
> needed a check if a command exists on system.
> Employed the following:
> (defun system-command-exists-p (command)
> "Return t if COMMAND is available on system. "
> (let* ((cmd (format "type %s" command)))
> (eq 0 (shell-command cmd))))
> Any comments/suggestions?
Use %S or (shell-quote-argument command).
type is a built-in command specific to the sh familly of shells.
Perhaps it would be a good idea to explicitely call up sh?
It may be useful to return the path of the command:
(defun system-command-exists-p (command)
"Return t if COMMAND is available on system. "
(let* ((cmd (format "/bin/sh -c 'type %s'"
(when (eql 0 (shell-command cmd))
(let ((result (shell-command-to-string cmd)))
(if (string-match "^.* is \\(.*\\)\n$"result)
(match-string 1 result)
(mapcar (function system-command-exists-p)
'("cat" "type" "foo"))
--> ("/bin/cat" "a shell builtin" nil)