Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Jun 1998 19:10:06 +0000 (GMT)
From:      Donn Miller <dmm125@bellatlantic.net>
To:        hackers@FreeBSD.ORG
Subject:   getopt and files that start with - or --
Message-ID:  <Pine.NEB.3.96.980616184616.202A-100000@myname.my.domain>

next in thread | raw e-mail | index | archive | help
Hi

I had some problems with filenames that start with - or --.  The getopt()
library function interprets arguments beginning with "-" passed to
programs like ls, rm, grep as options.  This is bad if you try to do 
rm -* or
ls -* or grep "a string" -*.  I thought maybe a provision could be made to
"ignore the following arguments" passed to getopt().

Say you have a file named --weird.jpg.  You want to remove this, so you
do:

rm --* or just --weird.jpg.  rm will complain about the invalid option
--weird.jpg, which isn't actually an option but a filename.  "ls" will
also complain, as well as other programs using getopt().  So I thought
that maybe getopt could use an option such as ---i or ---ignore to ingore
all other options.  Otherwise, you would have to use a program like this
to remove the offending files:

/* unlink: force removal of ALL files 
   usage: unlink file1 file2 .. filen 
   just like rm -f except no options */

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
  int i;

  if (argc == 1) {
    fprintf(stderr, "usage: unlink file[s].\n");
    exit(-1);
  }

  for (i = 1 ; i < argc ; i++) {
    if (unlink(argv[i]) == 0)
      printf ("removed %s\n", argv[i]);
    else
      perror(argv[i]);
  }	

  return 0;
}

Or else maybe libc.so.* could use a hack to deal with these stange
situations.

Another less attractive solution would be to just use the code above,
install it in /usr/local/bin, and use it like rm -f.

	Donn


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96.980616184616.202A-100000>