Subject: Re: bug#47432: 28.0.50; Dired using ! or & on file should fail without command supplied

From: Arthur Miller <[email-masked]>
Date: Sat, 27 Mar 2021 21:28:31 +0100

Jean Louis <[email-masked]> writes:

> * Arthur Miller <[email-masked]> [2021-03-27 17:00]:
>> How you seen the docs? For example C-h k ! RET:
>> 
>> Signature
>> (dired-do-shell-command COMMAND &optional ARG FILE-LIST)
>> 
>> Documentation
>> Run a shell command COMMAND on the marked files.
>> 
>> 
>> > Why should there be attempt to execute non-executable files?
>> 
>> Because you asked it to by calling ! or & on a file in Dired.
>
> I have got a feeling you have not get really what is taking place:
>
> 1. Dired mode
> 2. Come on any file or directory, not executable
> 3. Press ! or &
> 4. Press ENTER
> 5. Get error, it can be different, depending of situation. Like
>    /usr/bin/bash: line 1: admin_Leo: command not found where "admin_Leo"
>     is directory
>
> I cannot see in the documentation that ! or & in Dired is supposed to
> run that specific marked file as COMMAND. I can understand that
> command is asked and user should enter the command. But I do not see
> that the marked file is supposed to be executed as COMMAND when
> command is not manually entered by user.
>
> Why is Emacs trying to execute a directory?
>
> Why is Emacs trying to execute non-executable file?
>
> - documentation of the function should maybe reflect that ! or & is
>   meant to execute the marked file or current file in Dired if no
>   COMMAND is supplied manually.
>
> - Emacs should stop trying to execute directories or non executable
>   files.

Emacs is not executing them, Emacs is passing them to the shell. Same
happends as if you tried to execute that file from the command
prompt. If you don't supply a COMMAND it just passes entire list to
shell and shell tries to execute the first file in the list. If there is
a shebang in that file it will get executed in proper interpretter. If
not shell will repport you an error. Would you try to execute your
admin_Leo in terminal? Guess not. So why would you try in Dired?

You are asking it to do stuff that shell already does. Emacs can
probably implement shell functionality on it's own, but I guess
it was simplicity of implementation in that case.

Doing extra checks would save one process invocation, but does it really
matter in this case?