如何在从Raspberry pi python脚本调用的3个bash脚本之间传递变量

时间:2016-12-21 03:42:23

标签: python bash shell variables

我在Raspberry pi 3上运行一个python脚本,它对我的​​iMac(Yosemite)上的bash脚本进行3次调用。

pi的python脚本具有以下3个调用的代码(请注意,这是一个简单的示例... python脚本有一系列IF语句,用于确定进行哪些调用以及发送哪个'phrase'参数。 ..我正在解释这个以避免我将3个电话分组的建议):

url = "http://10.0.1.11/cgi-bin/saysomethinghttp9a.sh"
response = urllib2.urlopen(url).read()

url = "http://10.0.1.11/cgi-bin/saysomethinghttp9.sh?phrase="
response = urllib2.urlopen(url).read()

url = "http://10.0.1.11/cgi-bin/saysomethinghttp9b.sh"
response = urllib2.urlopen(url).read()

iMac上有 3个bash脚本第一个 sayomethinghttp9a.sh )捕获变量中的当前输出量( parm ),然后设置输出量达到14级。

#!/bin/bash
echo -e "Content-type: text/html\n"

cat << junk
<html>
<head>
<title>
saying
</title>
</head>
<body>
junk
#-----------------------
currVol=$(osascript -e "get volume settings")
var1=$( echo $currVol | cut -d":" -f1 )
var2=$( echo $currVol | cut -d":" -f2 )
origVol=$( echo $var2 | cut -d"," -f1 )
parm="set volume output volume $origVol"

export parm

osascript -e "set volume output volume 14"
#-----------------------
cat << junk
</body>
</html>
junk

第二个 sayomethinghttp9.sh )从调用python脚本中获取短语,然后使用命令说出这个短语。 (请注意,出于某种原因,使用命令时,音量比播放音乐时要大得多)

#!/bin/bash
echo -e "Content-type: text/html\n"

PHRASE=`echo "$QUERY_STRING" | sed -n 's/^.*phrase=\([^&]*\).*$/\1/p' | sed "s/+/ /g"$

cat << junk
<html>
<head>
<title>
saying
</title>
</head>
<body>
junk
#-----------------------
say $PHRASE
#-----------------------
cat << junk
</body>
</html>
junk

第三个 sayomethinghttp9b.sh )正在尝试使用在 parm 中捕获的变量第一个将输出音量级别重置为原始级别的脚本。

#!/bin/bash
echo -e "Content-type: text/html\n"

cat << junk
<html>
<head>
<title>
saying
</title>
</head>
<body>
junk
#-----------------------
osascript -e "$parm"
#-----------------------
cat << junk
</body>
</html>
junk

我的问题是我试图将第一个脚本中创建的变量 parm 传递给第三个脚本。从代码中我可以看到,我试图在第一个脚本中“导出”变量,但是第三个脚本看不到它!

1 个答案:

答案 0 :(得分:1)

在多个脚本中传递变量的简单方法是将变量存储在临时文件中,该文件可由任何其他脚本读取。例如:

echo "$parm" > /tmp/ParmHolder

然后从中读取很容易:

cat /tmp/ParmHolder

在许多系统中,目录/ tmp /在每次启动时都被“清除”,这在这种情况下是一件好事 - 我建议将临时文件保存在这样的目录中。