[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: system-command-exists-p
From: |
Pascal J. Bourguignon |
Subject: |
Re: system-command-exists-p |
Date: |
Mon, 07 Dec 2009 11:13:10 +0100 |
User-agent: |
Gnus/5.1008 (Gnus v5.10.8) Emacs/22.3 (darwin) |
Andreas Roehler <andreas.roehler@online.de> writes:
> Hi,
>
> 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'"
(shell-quote-argument command))))
(when (eql 0 (shell-command cmd))
(let ((result (shell-command-to-string cmd)))
(if (string-match "^.* is \\(.*\\)\n$"result)
(match-string 1 result)
result)))))
(mapcar (function system-command-exists-p)
'("cat" "type" "foo"))
--> ("/bin/cat" "a shell builtin" nil)
--
__Pascal Bourguignon__