2011-06-14 20 views
9

terminal İştebash sözdizimi hatası: "(" bu işlev düzgün çalışıyor Nedense beklenmedik

newbootstrap.sh: 2: Syntax error: "(" unexpected 

çıktısı benim kodudur (hat 2 fonksiyon MoveToTarget() {)

#!/bin/bash 
function MoveToTarget() { 
    #This takes to 2 arguments: source and target 
    cp -r -f "$1" "$2" 
    rm -r -f "$1" 
} 

function WaitForProcessToEnd() { 
    #This takes 1 argument. The PID to wait for 
    #Unlike the AutoIt version, this sleeps 1 second 
    while [ $(kill -0 "$1") ]; do 
      sleep 1 
    done 
} 

function RunApplication() { 
    #This takes 1 application, the path to the thing to execute 
    exec "$1" 
} 

#our main code block 
pid="$1" 
SourcePath="$2" 
DestPath="$3" 
ToExecute="$4" 
WaitForProcessToEnd $pid 
MoveToTarget $SourcePath, $DestPath 
RunApplication $ToExecute 
exit 

cevap

24

You olduğunu 'işlevi bildirmek için yanlış sözdizimi kullanarak yeniden Bunu kullan.

MoveToTarget() { 
    # Function 
} 

Ya da bu:

Ancak, her ikisi de değil.

Ayrıca, daha sonra argümanları ayırmak için virgül kullandığınızı görüyorum (MoveToTarget $SourcePath, $DestPath). Bu da bir problem. bash, virgül değil argümanları ayırmak için boşluk kullanır. Virgülü kaldırın ve altın olmalısınız.

+0

Teşekkürler! Şimdi mantıklı. Bunu yapan bazı web siteleri gördüm. – rsmith

+1

Web sitesinin yanlış olduğunu @rsmith. –

+0

@rsmith Siteyi adlandırın ya da bir rüyaydı :-) – Jens

4

Ayrıca bash komut dosyalarındaki işlevleri tanımlamak için yeni. sürüm 4.3.11 (1) 'ın bir bashını kullanıyorum: - Ubuntu 14.04'da (x86_64-pc-linux-gnu) serbest bırakın.

Neden bilmiyorum ama function anahtar kelimesi ile başlayan tanım hiçbir zaman benim için işe yaramıyor. Ben gibi yeni bir satıra { koyarsanız

Syntax error: "}" unexpected 

:

function my_function 
{ 
    echo Hello. 
} 

Bir Hello. yazdırır aşağıdaki

function check_and_start { 
    echo Hello 
} 

gibi

bir tanım hata mesajı üretir betiği çalıştırdığımda, bu işlevi hiç çağırmasam bile, ch da istediğimiz şeydir.

Bunun neden işe yaramayacağını bilmiyorum çünkü birçok öğreticiye de baktım ve hepsi de ilk satırın sonunda açık kaşlı ayraçları koydular. Belki de kullandığımız bash versiyonu? Her neyse, sadece bilgin için buraya koy.

C tarzı fonksiyon tanımını kullanmak zorunda:

check_and_start() { 
    echo $1 
} 

check_and_start World! 
check_and_start Hello,\ World! 

ve beklendiği gibi çalışır.

+1

Aynı sorunu yaşıyorum. Kelime fonksiyonunu düşürmek ve paran eklemek benim için de işe yaradı. İşletim stilinin OS X'de iyi çalıştığını fark ettim. OS X'im bash'ın daha eski bir sürümünü çalıştırıyor olsa da. –

+0

Teşekkürler! C tarzı "sh" kabuk için çalışıyor –

İlgili konular