2017-09-13 56 views
1

我有一個bash腳本,與幾個變量調用qsub發送陣列PBS腳本

group=group_1 
normals=$(IFS=,; echo *.txt) 

qsub -v VAR1=$group,VAR2=${normals[@]} [...] run_script.pbs 

run_script.pbs

#PBS -l nodes=1:ppn=16 
#PBS -l walltime=2:00:00 
#PBS -l mem=10GB 

group=$VAR1 
normals=$VAR2 

echo ${normals[@]} 

在這種情況下,數組normals包含多個文件名,但是當我嘗試在.pbs腳本中訪問這些文件時,只打印第一個文件。

在.pbs腳本中傳遞和訪問數組的正確方法是什麼?

+0

@Inian - 確切地說 – fugu

+0

回答有幫助嗎?如果它解決了您的問題,請不要忘記標記接受的答案 – Inian

回答

3

你是不是將文件列表存儲在一個數組中。您只是在執行命令替換語法$(..)並將輸出存儲在變量的上下文中,並嘗試以數組的形式訪問它。

獲取文件夾(不需要$(..))的列表,並將其存儲在一個陣列是正確的做法,

shopt -s nullglob 
fileList=(*.txt) 

oldIFS="$IFS" 
IFS=, 
printf -v var_list "%s" "${fileList[*]}" 
IFS="$oldIFS" 
shopt -u nullglob 

nullglob選擇需要被處理的情況下,當*.txt沒」 t返回當前文件夾中的任何文件。不包括會在控制檯上吐出一些錯誤。當我們不再需要選項集時,我們用-u解除它。

隨着-v選項printf載體,可以存儲與逗號陣列輸出分離格式直接進入可變var_list

現在可以傳遞一個包含的文件的列表的$var_list以逗號分隔的格式的命令你想。

qsub -v VAR1=$group,VAR2="${var_list}"