我在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 传递给第三个脚本。从代码中我可以看到,我试图在第一个脚本中“导出”变量,但是第三个脚本看不到它!
答案 0 :(得分:1)
在多个脚本中传递变量的简单方法是将变量存储在临时文件中,该文件可由任何其他脚本读取。例如:
echo "$parm" > /tmp/ParmHolder
然后从中读取很容易:
cat /tmp/ParmHolder
在许多系统中,目录/ tmp /在每次启动时都被“清除”,这在这种情况下是一件好事 - 我建议将临时文件保存在这样的目录中。