我需要使用drush(Drupal shell)来报告一长串模块 - 基本上这是一个单行shell脚本,其中包含文件中的模块名称列表。 xargs应该可以做到这一点,但我无法让它工作。
我的shell脚本drpm.sh看起来像:
#!/bin/bash
drush pm-releases $1
我输入文件的前几行如下:
admin_menu
advanced_help
aggregator
anonymous_contact
ldapauth
...
(顺便说一句,文件中的行由^ M终止,如果重要的话......)
但是当我运行命令时:
xargs -0 -L 1 -a myfilename.txt ./drpm.sh
我得到了结果:
No release history was found for the requested project (admin_menu [warning]
).
No release history was found for the requested project (advanced_help [warning]
).
No release history was found for the requested project (aggregator [warning]
)....
但如果我输入./drpm.sh admin_menu
,我会得到:
------- RELEASES FOR 'ADMIN_MENU' PROJECT -------
Release Date Status
6.x-3.x-dev 2013-Sep-30 Development
6.x-3.0-alpha4 2010-Mar-11 Supported
6.x-1.x-dev 2013-Sep-30 Development
6.x-1.8 2011-Jun-16 Supported, Recommended
这是我想在输入文件中获取整个列表的结果。
我做错了什么?
答案 0 :(得分:0)
您需要查看自己的xargs
联机帮助页,了解它可以使用的不同参数。 Gnu vs. BSD vs. System VII都不同。
但是,在我的Mac(BSD)上,-0
参数表示文件名是NULL分隔而不是空格分隔。然而,你的名字是空白分隔的。摆脱-0
它可能会有效。
我还注意到你正在使用-L 1
每个条目调用一次命令。 xargs
的全部目的是尽可能少地调用该程序。如果您打算每个项目名称调用一次,只需使用循环:
while read project
do
./drpm.sh $project
done < myfilename.txt
答案 1 :(得分:0)
您的输入未被NUL(\0
)个字符(作为分隔符)分隔,因此-0
不需要xargs
参数。
所以保持简单:
xargs -L1 ./drpm.sh < myfilename.txt