【问题标题】:How to generate random numbers then pass it to a command line argument?如何生成随机数然后将其传递给命令行参数?
【发布时间】:2021-06-12 02:57:27
【问题描述】:

例如,如果我有以下命令:

python generate.py --outdir=out --trunc=1 --seeds=128,8755,90,543468

我想使用 bash 生成随机数并将它们放在 seeds 参数中,并使种子位于特定区间(例如 1-8000)之间。像这样:

rand_seed_gen= im_a_func_that_generates_4_random_seeds # pseudo code
python generate.py --outdir=out --trunc=1 --seeds=rand_seed_gen

编辑: 此外,有没有一种方法可以将随机整数的数量相乘,而无需单独显式传递每个整数?例如(同样是伪代码):${RANDOM} * 10 返回一个逗号分隔的 10 个随机整数列表。

【问题讨论】:

标签: bash shell command-line-arguments


【解决方案1】:

你可以这样做

python generate.py --outdir=out --trunc=1 --seeds=${RANDOM},${RANDOM},${RANDOM}

来自bash manpage

随机

每次引用此参数时,它都会扩展为一个随机整数 介于 0 和 32767 之间。为此变量赋值 随机数发生器。如果 RANDOM 未设置,它将失去其特殊 属性,即使它随后被重置。

但是如果你需要设置一个范围,你可以做的是

# Generate random numbers, replacing nullbytes with commas
randvars=$(shuf -z -i 1-8000 -n 4 | tr '\0' ',')
# Delete the last comma
randvars=${randvars::-1}

python generate.py --outdir=out --trunc=1 --seeds=${randvars}

其中-i 1-8000 是范围,-n 4 是您要返回的金额。

【讨论】:

  • 另外,有没有一种方法可以将随机整数的数量相乘,而无需单独显式传递每个整数?例如(再次,伪代码):${RANDOM} * 10 返回一个逗号分隔的 10 个随机整数列表。
  • @dedede 编辑帖子以包含设置范围的方法
  • 当我逐行执行时它不起作用但是当我将整个内容插入到这样的参数中时它起作用了`python generate.py --outdir=out --trunc=1 - -seeds=`randvars=$(shuf -z -i 1-8000 -n 4 | tr '\0' ','); randvars=${randvars::-1};回声 ${randvars}`
  • @dedede 您可以取消引用--seeds="${randvars}" 部分,--seeds=${randvars} 也可以这样做
猜你喜欢
  • 2020-02-18
  • 2013-10-11
  • 2012-09-01
  • 2020-08-02
  • 2014-01-13
  • 2020-09-02
  • 2014-05-03
  • 2011-10-14
相关资源
最近更新 更多