2016-03-22 32 views
1
StudentAnwser=() 
inputScriptFile=001.sh 

while IFS= read -r line; 
do 
    StudentAnwser+=("$line") 
done < <(sh $inputScriptFile test.txt) 

o nesi bir hatasözdizimi hatası beklenmedik belirteci yakın `<'

foo.sh: line 22: syntax error near unexpected token `<' 
foo.sh: line 22: ` done < <(sh $inputScriptFile test.txt)' 

döndürür? Ben süreç ikamesi (<(some command) parçası) bazı çalışabilir demektir sh yılında (POSIX'deki tanımlanan) standart bir özelliktir, olmadığı için hata alıyorum

+5

Else, orada olanı eklemek için sizi Q düzenler. İyi şanslar. – shellter

+0

arasındaki boşluk kaldır << –

+4

@inquisitive_mind: Hayır, bash için geçerli bir sözdizimidir (ancak @ shellter'in söylediği gibi, sh için geçerli değil). '<<(...)', '<< (...)' dan farklıdır (aslında, * sonucu * yanlıştır). – Amadan

cevap

2

sonucundan hattı okumak için diğer sorudan çözümü uygulayın OS, ancak farklı konfigürasyonda başkalarıyla veya aynı işletim sisteminde olmayabilir.

Size komut üstündeki #!/bin/bash olduğunu açıkladı, ancak yine de gibi #!/bin/bash yok sayılacak ve senaryo sh tarafından yorumlanır, sh foo.sh aracılığıyla komut dosyasını çalıştırın sanırım.

Varsayılan kabuğunuzun bash (çalıştır echo $SHELL) olduğunu varsayıyorum, bu nedenle komut dosyasını terminalde yapıştırıp yürütürseniz tüm sorunlar ortadan kalkar.

==== GÜNCELLEME ==== benim varsayım doğruysa

Olası çözüm: Olduğu gibi, senaryonuz chmod +x foo.sh tarafından yürütülebilir bir hale

bırak #!/bin/bash. Ardından, komut dosyanızın ilk satırı olarak "#!/Bin/bash" komutunuz var mı? ./foo.sh

+1

türünde değil gibi ben de fikrim yok Sh veya bash kullanarak pes ediyorum. Ben doğrudan kullanın. /foo.sh o zaman –

+0

@BillyChan: Evet, hiçbir kabuk programcısı 'sh foo.sh' kullanır, biz tek bir dosyada tüm gerekli" kod "tutmak için" she-bang "satırına güveniriz. Lin'in ne yaptığını tahmin edebildiğine sevindim. Hepinize iyi şanslar! Not; Bu, S.O.'da yeterince zorlandı. .. 'sh foo.sh' kullanma fikrini nereden aldınız? "Sadece bir son çare" techinque (IHMO) olarak kaldırılmalıdır. – shellter

+0

'sh' ve ark. direkt olarak; betiği çalıştırılabilir yapmaktan ve shebang ile kabuğu belirtmekten daha fazla yazarak. (Tabii ki, betik çalıştırılabilir bir program bekleyen başka bir program tarafından çalıştırılacaksa, evet, çalıştırılabilir hale getirmek için gereklidir.) – chepner

İlgili konular