Ja ihr habt recht, ist keine mandatory option!
Es heißt nur:
"Mandatory arguments to long options are mandatory for short options too."
Ist aber keine Eigenart von uniq, sondern ein Feature von getopt. Die lange Option gibt einfach die kurze zurück mit optarg = NULL.
Es ist aber genauso vorgesehen, mit zwei :: ein optional argument als solches zu kennzeichnen!
in uniq.c getopt_long(,,".. D ==> D:: ..",,)
dann geht --all-repeated=separate und -Dseparate.
Ein schneller Hack. Früher hätte ich mir bei sowas mit SoftICE Windows zurechtgepatcht. Heute haben wir bei GNU/Linux ja die Source!
Die Ausgabe kann ich nachreichen:
Code: Alles auswählen
~$ e -e "1\n2\n2"
1
2
2
~$ e -e "1\n2\n2"|uniq
1
2
~$ e -e "1\n2\n2"|uniq -u
1
~$ e -e "1\n2\n2"|uniq -d
2
~$ e -e "1\n2\n2"|uniq -D
2
2
~$ e -e "1\n2\n2"|uniq --all-repeated=separate
2
2
~$ e -e "1\n2\n2"|uniq --all-repeated separate
uniq: separate: No such file or directory
~$ e -e "1\n2\n2"|uniq -Dseparate
uniq: eparate: invalid number of bytes to skip
~$ e -e "1\n2\n2"|uniq -D separate
uniq: separate: No such file or directory
Fix:
Code: Alles auswählen
cd /tmp
ag source coreutils/testing
cd coreutils*
./configure
vi +/12345 src/uniq.c
make
strip src/uniq
cp src/uniq /usr/local/bin
hash uniq
Final:
Code: Alles auswählen
~$ e -e "1\n2\n2"|uniq --all-repeated=separate
2
2
~$ e -e "1\n2\n2"|uniq -Dseparate
2
2
~$ e -e "1\n2\n2"|uniq --all-repeated separate
uniq: separate: No such file or directory
~$ e -e "1\n2\n2"|uniq -D separate
uniq: separate: No such file or directory
-der_linux_cowboy