将bash变量传递到存储为单独“ commands.txt”的命令列表中

问题描述 投票:0回答:2

我有以下PBS脚本:

#!/bin/bash -l
#PBS -l walltime=12:00:00,nodes=1:ppn=24,pmem=2580mb

((start=24))
((n_jobs_procimg=8))

cd $PBS_O_WORKDIR
conda activate msi_sip_37

module load parallel
parallel -u -j 3 < commands.txt
wait

而commands.txt的内容是:

python runs/process_img.py --n_jobs $n_jobs_procimg --msi_test True --idx_min $start+0 --idx_max $start+8
python runs/process_img.py --n_jobs $n_jobs_procimg --msi_test True --idx_min $start+8 --idx_max $start+16
python runs/process_img.py --n_jobs $n_jobs_procimg --msi_test True --idx_min $start+16 --idx_max $start+24

[我[错误地]期望$start$n_jobs_procimg应该可用于commands.txt中的命令,但是当我运行此作业时,对于commands]中的每个命令,都会收到以下错误。 txt

usage: process_img.py [-h] [-n N_JOBS] [-m MSI_TEST] [-i IDX_MIN] [-d IDX_MAX]
process_img.py: error: argument -n/--n_jobs: expected one argument

我如何修改PBS脚本中的parallel命令,以便将$start$n_jobs_procimg传递给commands.txt]

在这种情况下,$start应为等于24的整数,而$n_jobs_procimg应为等于8的整数。

与我的问题无关,但是对于上下文来说,[[process_img.py脚本使用了一个多处理池,该池采用处理核的数量并作为参数(--n_jobs),我想对此进行控制基于我可用的处理核心总数。

bash gnu-parallel
2个回答
0
投票
我将两个常量存储在单独的脚本中:

constants.sh:

((start=24)) ((n_jobs_procimg=8)

然后使用来源:

#!/bin/bash -l #PBS -l walltime=12:00:00,nodes=1:ppn=24,pmem=2580mb source constants.sh cd $PBS_O_WORKDIR conda activate msi_sip_37 module load parallel parallel -u -j 3 < commands.txt wait

然后使用commands.txt也包括它:

source constants.sh python runs/process_img.py --n_jobs $n_jobs_procimg --msi_test True --idx_min $start+0 --idx_max $start+8 python runs/process_img.py --n_jobs $n_jobs_procimg --msi_test True --idx_min $start+8 --idx_max $start+16 python runs/process_img.py --n_jobs $n_jobs_procimg --msi_test True --idx_min $start+16 --idx_max $start+24

这样,您就可以在任何地方使用它们,并且仅在发生更改时才需要编辑一个文件。

0
投票
export变量:

#!/bin/bash -l #PBS -l walltime=12:00:00,nodes=1:ppn=24,pmem=2580mb ((start=24)) ((n_jobs_procimg=8)) export start export n_jobs_procimg cd $PBS_O_WORKDIR conda activate msi_sip_37 module load parallel parallel -u -j 3 < commands.txt

© www.soinside.com 2019 - 2024. All rights reserved.