-1

我在使用这个start.sh脚本时遇到了问题。当我键入 ./start.sh时,它不起作用。我的意思是,它不会出错,但它什么也不做。

当我使用 VIM 打开这个文件时(我真的很想上传图片,但我不能,因为我几天前才注册了这个网站)从import sys,math,random to的行print '\n'都是红色的。之后EOS,颜色正常显示。如果我#在 前面输入cat,我的意思是,#cat <<EOS | python > target.txt颜色会改变。

所以我认为这条线:

cat <<EOS | python > target.txt

是错的。我该如何纠正?

#!/bin/sh

if [ "$1" = clean ]; then
rm -f *.log *.dat target.txt
exit
fi

num=1
length=1000
period=50

cat <<EOS | python > target.txt
import sys,math,random
funcs = [
lambda t : (0.8 * math.sin(t), 0.8 * math.cos(t)),
lambda t : (0.3 * math.sin(t), 0.3 * math.cos(t)),
lambda t : (0.8 * math.sin(3 * t), 0.8 * math.cos(t)),
lambda t : (0.8 * math.cos(t), 0.8 * math.sin(3 * t)),

lambda t : (0.4 * math.sin(2 * t) + 0.4, 0.8 * math.cos(t)),
lambda t : (0.4 * math.sin(2 * t) - 0.4, 0.8 * math.cos(t)),
lambda t : (0.8 * math.sin(2 * t), 0.4 * math.cos(t) + 0.4),
lambda t : (0.8 * math.sin(2 * t), 0.4 * math.cos(t) - 0.4),

lambda t : (0.4 * math.cos(t) + 0.4, 0.8 * math.sin(2 * t)),
lambda t : (0.4 * math.cos(t) - 0.4, 0.8 * math.sin(2 * t)),
lambda t : (0.8 * math.cos(t), 0.4 * math.sin(2 * t) + 0.4),
lambda t : (0.8 * math.cos(t), 0.4 * math.sin(2 * t) - 0.4),

lambda t : (0.4 * math.sin(t) + 0.4, 0.8 * math.cos(t)),
lambda t : (0.4 * math.sin(t) - 0.4, 0.8 * math.cos(t)),
lambda t : (0.8 * math.sin(t), 0.4 * math.cos(t) - 0.4),
lambda t : (0.8 * math.sin(t), 0.4 * math.cos(t) + 0.4),

lambda t : (0.8 * math.sin(t), 0.8 * math.cos(2 * t)),
lambda t : (0.8 * math.sin(t), -0.8 * math.cos(2 * t)),
lambda t : (0.8 * math.cos(2 * t), 0.8 * math.sin(t)),
lambda t : (-0.8 * math.cos(2 * t), 0.8 * math.sin(t)),

lambda t : (0.3 * math.sin(t) + 0.5, 0.3 * math.cos(t) + 0.5),
lambda t : (0.3 * math.sin(t) + 0.5, 0.3 * math.cos(t) - 0.5),
lambda t : (0.3 * math.sin(t) - 0.5, 0.3 * math.cos(t) + 0.5),
lambda t : (0.3 * math.sin(t) - 0.5, 0.3 * math.cos(t) - 0.5)
]
def gen_sigma():
sigma = [0.01, 0.05]
n = 0
while True:
    yield sigma[n % len(sigma)]
    n += 1
gen = gen_sigma()

for f in funcs:
sigma = gen.next()
for n in xrange($num):
    m = random.randint(0, 1000)
    for t in [x * ((2 * math.pi) / $period) for x in xrange(m, $length+m)]:
        print '\t'.join([str(x + random.gauss(0, sigma)) for x in f(t)])
    print '\n'
EOS

if [ x`which rnn-learn` == x ]; then
path1=../../src/rnn-learn/
else
path1=
fi
${path1}rnn-learn -c config.txt target.txt
4

1 回答 1

1

剧本没有不言而喻的错误。标记为红色的部分是一个“此处文档”,它从包含的行之后的行到包含<<EOS的行EOS。这里的文档作为标准输入提供给 Python,Python 将其输出写入文件target.txt。脚本的其余部分rnn-learn在文件上运行命令,target.txt由配置文件引导(我猜)config.txt

当您#在包含命令的行前面放置 a 时,cat它就变成了注释,因此以下几行是“只是 shell 脚本”——它们作为 shell 脚本没有意义,但vim很难知道这一点(它是一个编辑器!)。因此,它会更改线条的颜色,因为它们不再是此处文档的一部分。

cat真的没必要。该行可以写成:

python > target.txt <<EOS
于 2013-02-07T04:37:38.430 回答