SYS$COMMAND is a process-permanent logical name that refers to the source of user input.
When a user logs in interactively, SYS$COMMAND points to the terminal. When a command procedure is executed interactively, SYS$COMMAND still points to the terminal (while SYS$INPUT points to the command procedure file) so that you can accept user input when necessary. When you submit a batch job, both SYS$INPUT and SYS$COMMAND point to the command procedure file.
Although you can redefine SYS$COMMAND, DCL ignores your definition. DCL always uses the default definition for your initial input stream. However, if you execute an image that references SYS$COMMAND, the image can use your new definition.