On Thu, Aug 25, 2022 at 03:32:15PM +0200, Laszlo Ersek wrote:
 Hi,
 
 most shell scripts in the v2v projects start with a shebang like this:
 
 #!/bin/bash -
 
 I *think* I understand the intent of the single hyphen, but (a) it seems unnecessary, (b)
even if we insisted, using the double-hyphen separator "--" is much more
idiomatic (even though the shell, per POSIX, is supposed to interpret "-"
identically to "--").
 
 Regarding why I think the hyphen is unnecessary:
 
 - setuid shell scripts are not a thing on any platform we (should) care about
 
 - the script name is not reinterpreted as an option *anyway*
 
 Consider:
 
 cat >-v <<EOT
 #!/bin/bash
 echo hello \$1
 EOT
 
 chmod +x -- -v
 
 PATH=$PWD:$PATH -v world
 --> hello world
 
 That is, when we run the script under the name "-v" (with it being on the PATH)
and with the single command line argument "world", we'd naively asume that
the shebang translated to:
 
   /bin/bash -v world
 
 where "-v" came from the script's name, and "world" would be
taken as the name of a shell script to execute. Thus, the idea would be to prevent this
(i.e., to pass options to the interpreter by renaming or (sym)linking the shell script).
 
 But that's not what we actually see; what we see is consistent with the command:
 
 /bin/bash -- -v world
 --> hello world
 
 In fact, if I append "sleep 1000" to the script, I can also fetch:
 
 $ hexdump -C /proc/10975/cmdline
 00000000  62 61 73 68 00 2d 2d 00  2d 76 00 77 6f 72 6c 64  |bash.--.-v.world|
 00000010  00                                                |.|
 00000011
 
 So glibc and/or the Linux kernel already inserts the "--" option/operand
delimiter!
 
 I intend to contribute a shell script to virt-p2v; do I need to use the hyphen in the
shebang? (If so, I prefer the double-hyphen.) 
Eric should be able to give the definitive answer here.
Rich.
-- 
Richard Jones, Virtualization Group, Red Hat 
http://people.redhat.com/~rjones
Read my programming and virtualization blog: 
http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top