BSD 版 xargs 与 GNU 版有一个显著的不同——它支持-J
选项。
比如说,你使用 find 命令得到了一个文件列表。你要将它们传递给一个叫concat_files
的程序来处理后生成一个指定的新文件,比如:
1 | concat_files file1 file2 file3 output |
而且,这个命令不像 cp 或者 mv 那样,有个-t
参数来把目标文件放到不定长的文件列表之前。总之呢,你不得不构建一行命令,它的中间部分是你会从管道传过去的文件列表。而 GNU xargs 要么全给你放末尾(默认),要么每项执行一次命令(指定-I
时)。而 BSD xargs 则可以用-J
选项指定一个占位符,使用这个占位符指明参数插入的位置:
1 | find ... | xargs -J % concat_files % output |
BSD xargs 的另一个特有参数是-o
,作用你们就自己看文档啦=w=
我想在 Linux 上使用 BSD xargs,怎么办呢?在 AUR 里搜索到了这个,但是已经编译不过去了。安装 bmake 后手动边改边编译,最终终于成功编译了 obase 中的大多数工具。我知道的比较有特色的也就这个 xargs 了,于是单独打了个包 bsdxargs,放在我的 lilydjwg 源 里。
附,obase 的补丁:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | diff --git a/Makefile b/Makefile index 2bb18b4..96acf8a 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,8 @@ LIBOBASE=${.CURDIR}/libobase/libobase.a INCLUDES_libobase=-isystem ${.CURDIR}/libobase/include COPTS_libobase=-D_GNU_SOURCE DPLIBS+=${LIBOBASE} +LDADD+= ${LIBOBASE} +.export LDADD .export COPTS DPLIBS HOSTCC HOSTCFLAGS USE_DPADD_MK SUBDIR=\ diff --git a/src/bin/ls/Makefile b/src/bin/ls/Makefile index defd607..6ad4725 100644 --- a/src/bin/ls/Makefile +++ b/src/bin/ls/Makefile @@ -3,6 +3,6 @@ PROG= ls SRCS= cmp.c ls.c main.c print.c util.c DPADD= ${LIBUTIL} -LDADD= -lutil +LDADD+= -lutil .include <bsd.prog.mk> diff --git a/src/usr.bin/awk/Makefile b/src/usr.bin/awk/Makefile index 54857d3..9d2d243 100644 --- a/src/usr.bin/awk/Makefile +++ b/src/usr.bin/awk/Makefile @@ -2,7 +2,7 @@ PROG= awk SRCS= ytab.c lex.c b.c main.c parse.c proctab.c tran.c lib.c run.c -LDADD= -lm +LDADD+= -lm DPADD= ${LIBM} CLEANFILES+=proctab.c maketab ytab.c ytab.h stamp_tabs CFLAGS+=-I. -I${.CURDIR} -DHAS_ISBLANK -DNDEBUG diff --git a/src/usr.bin/dc/Makefile b/src/usr.bin/dc/Makefile index b0a2396..f8ee358 100644 --- a/src/usr.bin/dc/Makefile +++ b/src/usr.bin/dc/Makefile @@ -3,7 +3,7 @@ PROG= dc SRCS= dc.c bcode.c inout.c mem.c stack.c COPTS+= -Wall -LDADD= -lcrypto +LDADD+= -lcrypto DPADD= ${LIBCRYPTO} .include <bsd.prog.mk> diff --git a/src/usr.bin/du/Makefile b/src/usr.bin/du/Makefile index feb644d..9676f37 100644 --- a/src/usr.bin/du/Makefile +++ b/src/usr.bin/du/Makefile @@ -2,6 +2,6 @@ PROG= du DPADD= ${LIBUTIL} -LDADD= -lutil +LDADD+= -lutil .include <bsd.prog.mk> diff --git a/src/usr.bin/gzsig/Makefile b/src/usr.bin/gzsig/Makefile index 0dc7b81..f4f0664 100644 --- a/src/usr.bin/gzsig/Makefile +++ b/src/usr.bin/gzsig/Makefile @@ -3,7 +3,7 @@ PROG = gzsig SRCS = gzsig.c key.c sign.c ssh.c ssh2.c util.c verify.c x509.c -LDADD = -lcrypto -lm +LDADD += -lcrypto -lm DPADD = ${LIBCRYPTO} ${LIBM} CLEANFILES += TAGS *~ diff --git a/src/usr.bin/lex/Makefile b/src/usr.bin/lex/Makefile index 080a151..27a783e 100644 --- a/src/usr.bin/lex/Makefile +++ b/src/usr.bin/lex/Makefile @@ -17,7 +17,7 @@ SRCS= ccl.c dfa.c ecs.c gen.c main.c misc.c nfa.c parse.c sym.c tblcmp.c \ yylex.c OBJS+= scan.o skel.o CLEANFILES+=parse.c parse.h scan.c skel.c y.tab.c y.tab.h -LDADD= -lfl +LDADD+= -lfl DPADD= ${LIBL} MAN = flex.1 diff --git a/src/usr.bin/m4/Makefile b/src/usr.bin/m4/Makefile index 7c510f5..16a282c 100644 --- a/src/usr.bin/m4/Makefile +++ b/src/usr.bin/m4/Makefile @@ -8,7 +8,7 @@ CFLAGS+=-DEXTENDED -I. CDIAGFLAGS=-W -Wall -Wstrict-prototypes -pedantic \ -Wno-unused -Wno-char-subscripts -Wno-sign-compare -LDADD= -ly -lfl -lm +LDADD+= -ly -lfl -lm DPADD= ${LIBY} ${LIBL} ${LIBM} SRCS= eval.c expr.c look.c main.c misc.c gnum4.c trace.c tokenizer.l parser.y diff --git a/src/usr.bin/make/Makefile b/src/usr.bin/make/Makefile index a63ed94..1d12280 100644 --- a/src/usr.bin/make/Makefile +++ b/src/usr.bin/make/Makefile @@ -14,7 +14,7 @@ CDEFS+=-DHAS_EXTENDED_GETCWD CFLAGS+=${CDEFS} HOSTCFLAGS+=${CDEFS} -LDADD= -lrt +LDADD+= -lrt SRCS= arch.c buf.c cmd_exec.c compat.c cond.c dir.c direxpand.c engine.c \ error.c for.c init.c job.c lowparse.c main.c make.c memory.c parse.c \ diff --git a/src/usr.bin/mandoc/Makefile b/src/usr.bin/mandoc/Makefile index cf565fd..6086a81 100644 --- a/src/usr.bin/mandoc/Makefile +++ b/src/usr.bin/mandoc/Makefile @@ -9,7 +9,7 @@ CFLAGS+=-W -Wall -Wstrict-prototypes CFLAGS+=-Wno-unused-parameter .endif -LDADD= -ldb +LDADD+= -ldb SRCS= roff.c tbl.c tbl_opts.c tbl_layout.c tbl_data.c eqn.c mandoc.c read.c SRCS+= mdoc_macro.c mdoc.c mdoc_hash.c \ diff --git a/src/usr.bin/script/Makefile b/src/usr.bin/script/Makefile index d7dbf01..8837084 100644 --- a/src/usr.bin/script/Makefile +++ b/src/usr.bin/script/Makefile @@ -1,7 +1,7 @@ # $OpenBSD: Makefile,v 1.3 1997/09/21 11:50:42 deraadt Exp $ PROG= script -LDADD= -lutil +LDADD+= -lutil DPADD= ${LIBUTIL} .include <bsd.prog.mk> diff --git a/src/usr.bin/ul/Makefile b/src/usr.bin/ul/Makefile index bab290c..12295ec 100644 --- a/src/usr.bin/ul/Makefile +++ b/src/usr.bin/ul/Makefile @@ -2,6 +2,6 @@ PROG= ul DPADD= ${LIBCURSES} -LDADD= -lcurses +LDADD+= -lcurses .include <bsd.prog.mk> diff --git a/src/usr.bin/vacation/Makefile b/src/usr.bin/vacation/Makefile index 6f08990..f9ef0d6 100644 --- a/src/usr.bin/vacation/Makefile +++ b/src/usr.bin/vacation/Makefile @@ -1,6 +1,6 @@ # $OpenBSD: Makefile,v 1.3 1997/09/21 11:51:42 deraadt Exp $ PROG= vacation -LDADD= -ldb +LDADD+= -ldb .include <bsd.prog.mk> diff --git a/src/usr.bin/wc/Makefile b/src/usr.bin/wc/Makefile index 3f3c619..0f3d1a2 100644 --- a/src/usr.bin/wc/Makefile +++ b/src/usr.bin/wc/Makefile @@ -2,6 +2,6 @@ PROG= wc DPADD= ${LIBUTIL} -LDADD= -lutil +LDADD+= -lutil .include <bsd.prog.mk> |