The buffer name for the shell-command or async-shell-command would be much more useful if they were given the name of the command being executed.

I started working a bit on a patch for that, but it's just code changes right now. Here's a preview of what I mean.

@@ -4252,12 +4252,6 @@ undo-outer-limit-truncate
 
 ;;;; Shell commands
 
-(defconst shell-command-buffer-name "*Shell Command Output*"
-  "Name of the output buffer for shell commands.")
-
-(defconst shell-command-buffer-name-async "*Async Shell Command*"
-  "Name of the output buffer for asynchronous shell commands.")
-
 (defvar shell-command-history nil
   "History list for some commands that read shell commands.

@@ -4671,7 +4660,8 @@ shell-command
  ;; Output goes in a separate buffer.
  (if (string-match "[ \t]*&[ \t]*\\'" command)
     ;; Command ending with ampersand means asynchronous.
-            (let* ((buffer (get-buffer-create
+            (let* ((shell-command-buffer-name-async (concat "*" command "*"))
+                   (buffer (get-buffer-create
                             (or output-buffer shell-command-buffer-name-async)))
                    (bname (buffer-name buffer))
                    (proc (get-buffer-process buffer))
@@ -4942,7 +4932,8 @@ shell-command-on-region
        shell-command-default-error-buffer
        t
        (region-noncontiguous-p))))
-  (let ((error-file
+  (let ((shell-command-buffer-name (concat "*" command "*"))
+        (error-file
  (if error-buffer
      (make-temp-file
       (expand-file-name "scor"