Deutsch English Français Italiano |
<vbcgbu$cc45$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Lew Pitcher <lew.pitcher@digitalfreehold.ca> Newsgroups: comp.unix.programmer Subject: Re: Always use "--" (Was: Long filenames in DOS/Windows and Unix/Linux) Date: Thu, 5 Sep 2024 14:48:31 -0000 (UTC) Organization: A noiseless patient Spider Lines: 63 Message-ID: <vbcgbu$cc45$1@dont-email.me> References: <9e7a4bd1-bfbb-4df7-af1a-27ca9625e50bn@googlegroups.com> <yga34mfoily.fsf@akutech.de> <87ttevzoj3.fsf@nosuchdomain.example.com> <vb9k2l$3r705$1@dont-email.me> <vb9ls7$1igeo$1@news.xmission.com> <vb9mls$3rk17$1@dont-email.me> <20240904192549.23@kylheku.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injection-Date: Thu, 05 Sep 2024 16:48:31 +0200 (CEST) Injection-Info: dont-email.me; posting-host="c4741b9aab2f3ab481d100c5a665b386"; logging-data="405637"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/bHm7k2HBS3Qk6xkJn3Ry4xb7DMXTE9xA=" User-Agent: Pan/0.139 (Sexual Chocolate; GIT bf56508 git://git.gnome.org/pan2) Cancel-Lock: sha1:vqtTFHYcu7pUloCagVKyo6gpcc0= Bytes: 3886 On Thu, 05 Sep 2024 02:29:49 +0000, Kaz Kylheku wrote: > On 2024-09-04, Lew Pitcher <lew.pitcher@digitalfreehold.ca> wrote: >> On Wed, 04 Sep 2024 13:04:07 +0000, Kenny McCormack wrote: >> >>> In article <vb9k2l$3r705$1@dont-email.me>, >>> Nuno Silva <nunojsilva@invalid.invalid> wrote: >>> ... >>>>> D'oh! >>>> >>>>(Along with these quotes, I'd add ./ before $file.) >>> >>> Or, more simply, just put -- after the -p. >>> >>> This is an often overlooked aspect of shell programing. You should always >>> use "--". The "shellcheck" program will tell you this, if you let it. >> >> The "--" option is just that, an option coded into the argument parser of >> the program being invoked. Many programs /do not/ recognize "--" as an >> "end of flags" argument, so the effectiveness of "--" is unreliable. >> >> OTOH, if you specify a fully qualified pathname, (or, at least, a qualified >> relative pathname), you can assure yourself that the file path provided >> to the program /will not/ start with the '-' that indicates a program flag. >> >> Note that all this is /convention/ and not /requirement/. There are situations >> in which /none/ of the above applies, as >> a) the program interprets it's arguments by /position/, or >> b) the program doesn't use the '-' to introduce flag arguments, or >> c) the program doesn't take filenames as arguments, or >> d) some other conditions that I'm too lazy to enumerate > > d) it's a goddamned GNU program that continues to take options > after non-option arguments! > > $ ls . -ld > drwxr-xr-x 67 kaz kaz 36864 Sep 3 15:59 . > > ... unless -- is specified to signal the end of options. > > $ ls -ld -- . -ld > ls: cannot access '-ld': No such file or directory > drwxr-xr-x 67 kaz kaz 36864 Sep 3 15:59 . > > So unfortunately although starting an argument with ./ will > ensure that it's not treated as an option, it doesn't mean > it will be treated as the first non-option argument after > which there are no more option arguments. That seems to be a symptom of the use of the GNU variant of the POSIX getopt(3) function. "By default, [GNU] getopt() permutes the contents of argv as it scans, so that eventually all the nonoptions are at the end. Two other modes are also implemented. If the first character of optstring is '+' or the envi- ronment variable POSIXLY_CORRECT is set, then option processing stops as soon as a nonoption argument is encountered." The "workaround" seems to be to set the POSIXLY_CORRECT envvar as part of your standard environment. -- Lew Pitcher "In Skills We Trust"