shell脚本中的参数列表太长了

时间:2017-10-07 10:52:05

标签: shell unix

一个案例: 我在tsch上编写脚本,在python上调用其他脚本。 当我从cmd调用python脚本时,它没问题。 当我在tsch上调用测试脚本时,我得到错误:参数列表太长

另一个案例:

git grep -e "alex" -- `git ls-files | grep -v 'bin'`

我也收到错误:Argument list too long。 有什么问题可以解决?

2 个答案:

答案 0 :(得分:0)

更新了答案

我不熟悉您正在使用的特定git命令,您似乎也没有明确地回答评论中的问题。我猜你可能想要这样的东西:

git ls-files | grep -v 'bin' | xargs -L 128 git grep -e "alex" --

原始答案

解决“错误的经典方法:参数列表太长”xargs一致。它可用于重复调用您提供其名称的脚本,或者echo如果您不提供,则使用有限数量的参数,直到参数全部被消耗。

因此,假设您在一个目录中有一百万个文件,那么ls *将会失败,但是一个简单的ls将会起作用。因此,我们可以将其用于:

ls | xargs -L 128

将一次重复调用echo(因为我们没有提供实用程序名称)128个文件名,直到所有文件都被回显。

所以,你可以这样做:

ls | xargs -L 128 yourScript.py

一次以128个文件名重复调用Python脚本。当然,你可能会做一些完全不同的事情并且与这种技术不相容,但到目前为止你的答案并不是很有帮助......

答案 1 :(得分:0)

某人来到这里需要做这样的事情:

./shell_script.sh param1

但是它从Argument list too long的shell脚本中引发了错误param1。 我只是碰到了这一点,并通过使用shell变量的一种解决方法对其进行了修复。

# calling the PARAM1 instead of $1 in code of shell_script.sh
export PARAM1=param1 ./shell_script.sh 

将字符串传输到nodejs的红宝石版本的示例:

ENV["PARAM1"]="a_bunch_of_test_string_as_longer_as_you_can"
`node node_script.sh`
var param1 = process.env.PARAM1;
console.log(param1);