2013-02-07 100 views
-1

我在使用這個start.sh腳本時遇到問題。 當我輸入 ./start.sh,它不起作用。 我的意思是,它沒有任何錯誤,但它什麼都不做。似乎錯了shell腳本:cat

當我用VIM打開這個文件(我真的要上傳的圖片,但我可以,因爲我只是前幾天不註冊這個網站) 從import sys,math,randomprint '\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 
+0

從哪裏得到這個Python腳本包裹在Bourne Shell中?我建議你與作者覈對。 – Johnsyweb

+0

如果我能做到,我做到了。但我無法與他聯繫。謝謝 – stacksmith

回答

1

腳本沒有什麼明顯的錯誤。標記爲紅色的部分是'here document',它從包含<<EOS的行後面的行延伸到僅包含EOS的行。這裏的文檔是Python的標準輸入,它將輸出寫入文件target.txt。腳本的其餘部分在target.txt文件上運行rnn-learn命令,由配置文件config.txt引導(我猜)。

當你在包含cat命令行的前面放一個#,變成一個評論,所以下面的行「只是shell腳本」 - 他們是沒有意義的shell腳本,但vim將很難要知道(這是一個編輯!)。所以,它會改變線條的顏色,因爲它們不再是這裏的文檔的一部分。

cat確實沒有必要。該行可寫成:

python > target.txt <<EOS 
+0

非常感謝。我需要檢查另一點 – stacksmith