Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: zargs doesn't work reliably

On 8/18/06, Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
On Aug 17,  3:59pm, Mikael Magnusson wrote:
} Usage: zargs [options --] [input-args] [-- command [initial-args]]
} % touch -- -- -+

There are approximately eleventeen zillion unix/linux commands that
break given those file names, including rm, ls, and cp, so I'm not
going to get particularly worked up about zargs behaving similarly.

% ls -l -- *
-rw-r--r-- 1 mikaelh users 0 2006-08-18 00:55 -+
-rw-r--r-- 1 mikaelh users 0 2006-08-18 00:55 --

However, if you'd looked just a little further, you'd find that in
fact zargs already has a solution for this problem.  There is even
an example in the manual:

     In the event that the string `--' is or may be an INPUT, the -e
     option may be used to change the end-of-inputs marker.  Note that
     this does _not_ change the end-of-options marker.  For example, to
     use `..' as the marker:

          zargs -e.. -- **/*(.) .. ls -l

     This is a good choice in that example because no plain file can be
     named `..', but the best end-marker depends on the circumstances.

(End manual page example, begin new one.)  You can even do:

          zargs -e$'\0' -- * $'\0' ls -d

unless you somehow have a file named (the nul byte).

} since input-args is the only part you do not control

The only part who does not control?

What i meant was it's the only part of the command that may contain
unplanned -- instances. Unless you also glob somewhere else in the
command... but that seems like a bad idea?

} it should come last, like so
} Usage: zargs [options --] [command [initial-args]] -- [input-args]

I think the designers of the xargs command, after which zargs is closely
modeled, would disagree with you.  See "man xargs".

} A problem is how to give -- as initial-args then

Would this be possible?
zargs '[options]' 'command [initial-args]' [input-args]
ie the ' are literal quotes in the command so zargs knows exactly what
to do with the first two arguments (in which case you'd have to zargs
'' '' * if you wanted to omit them so maybe not aesthetically pleasing
in that regard).

Precisely.  Another problem is that the command and initial-args may be
omitted, but the input-args may not be.

Sorry, I should have looked in the manual. In my defense zargs --help
was so helpful that i didn't suspect it left anything useful out and i
did say i was tired :). Thanks for the pointers.

Mikael Magnusson

Messages sorted by: Reverse Date, Date, Thread, Author