![xargs replstr 未按预期工作。不接受 {} 作为第二个参数](https://linux22.com/image/182496/xargs%20replstr%20%E6%9C%AA%E6%8C%89%E9%A2%84%E6%9C%9F%E5%B7%A5%E4%BD%9C%E3%80%82%E4%B8%8D%E6%8E%A5%E5%8F%97%20%7B%7D%20%E4%BD%9C%E4%B8%BA%E7%AC%AC%E4%BA%8C%E4%B8%AA%E5%8F%82%E6%95%B0.png)
我试图运行的命令:
mdb-tables davidoff.mdb | xargs -I {} mdb-export davidoff.mdb {} > {}.csv
mdb-export 有两个参数,我正在尝试通过管道传输第二个参数。然后我希望将每一个都写入一个文件。
这行不通。即使我删除了> {}.csv
仍然有错误:
Error: Table {} does not exist in this database.
外壳是zsh
第一部分的示例输出:
% mdb-tables davidoff.mdb
anatomypiclink bugs bugseverity bugtype classifications Diseases docaccess docaccesstype docassignments docclassifications docdetails docnotes docpicturelink docqa docs doctype keypicturelink keywords links logons mediatype navdoclinks navimagelinks navstructures organs Paste Errors pictureclassifications pictures picturetype qub3_queries_que qub3_relations_rel qub3_settings_set quotes references sequencelinks sequences subDocType videos dictionarytable doclinks docstatus media docs_ExportErrors
作为一个测试用例,我能够完成这项工作:
printf "1\n2\n3\n" | xargs -I touch {}
为什么我不能使用 replstr 作为第二个参数?
答案1
某些系统上的某些版本对xargs
参数设置了 255 字节的限制;如果是这种情况,则应在手册页的参数部分中提及-I
。当参数大于此限制时,占位符不会被替换。mdb-tables
将表名称列表输出为单行 500 字节。
正如 Quasímodo 提到的,您可以使用-d "\n"
参数将表名称分成单独的行;你也可以使用-1
.