设想情况:
我有一个叫做bc4j.py的python脚本,它有一个全局变量
correctBc4jfiles = [] 此变量包含所有文件的列表。
现在,我想在这个python脚本和那个shell脚本中调用另一个shell脚本,比如mail.sh。
correctBc4jfiles变量保存的文件数correctBc4jfiles变量的值赋值给另一个属于shell脚本本身的数组变量。correctBc4jfiles?我该怎么做?谢谢
发布于 2013-08-29 05:52:54
如果只传递一个参数,您可以拥有这样一个python脚本:
import subprocess
correctBc4jfiles = ["1","2","3"]
subprocess.call(["/bin/bash", "/path/to/mail.sh"] + correctBc4jfiles)有这样一个bash脚本:
#!/bin/bash
# I want to know the number of files the correctBc4jfiles variable holds
echo "$#"
# I want to iterate this variable correctBc4jfiles. how will i iterate it in shell script.
for A in "$@"; do
echo "$A"
done
# I want to assign the value of the correctBc4jfiles variable into another array variable which belongs to the shell script itself.
ANOTHER=("${@}")
# for A in "${ANOTHER[@]}"; do ...我们可以将多个变量从python传递到shell脚本吗?就像在这种情况下,我们只传递一个变量correctBc4jfiles?我该怎么做?
您必须让python脚本传递每个变量的值数,如下所示:
import subprocess
var0 = ["|1|", "|2|", "|3|"]
var1 = ["|4|", "|5|", "|6|"]
subprocess.call(["/bin/bash", "script.sh"] + [str(len(var0))] + var0 + [str(len(var1))] + var1)让巴什来解释它:
#!/bin/bash
varprefix='var'
varindex=0
declare -i count
while [[ $# -gt 0 ]]; do
count=$1
if [[ count -gt 0 ]]; then
eval "${varprefix}$(( varindex++ ))=(\"\${@:2:count}\")"
shift "$count"
fi
shift
done
set | grep ^var ## Just show what variables were made.它给出了这样的输出:
var0=([0]="|1|" [1]="|2|" [2]="|3|")
var1=([0]="|4|" [1]="|5|" [2]="|6|")
varindex=2
varprefix=var因此,您已经可以使用varX了。
如果不喜欢varX格式,只需将值复制到所需的数组变量:
myarray1=("${var0[@]}")
myarray2=("${var1[@]}")发布于 2013-08-29 05:15:47
您可以:
mail.sh。这是最可靠的方法。mail.sh (假设mail.sh设置正确,则应该接受多个参数)。您不能做的是将['a.txt','b.txt','c.txt']批发价传递给脚本。
https://stackoverflow.com/questions/18502456
复制相似问题