Ubuntuにて、githubから持ってきたスクリプトがSyntax errorとなってしまいました。orz
$ ./XXXXX.sh: 111: ./XXXXX.sh: Syntax error: "(" unexpected
githubに上がっているスクリプトでエラーって・・・早々無いだろうと。みんな凄腕のプログラマーたちだから、何かしら自分の環境とあわないのかなと思って調べてみました。
そしたらこんな情報が。
シェルスクリプトで『Syntax error: "(" unexpected』とかなった場合のメモ - 牌語備忘録 - pygo
./ではなく、bashをつけてやってみればいいとのことでやってみたところ・・・・・動いた!!
わからねぇ。なんでなんだろうと思ってもうちょっと調べてみたところ、どうやらshで実行した場合はdashで実行されるケースがあるとのこと。
Ubuntu の /bin/sh は、bash のシンボリックリンクではなく、dash (Debian Almquist Shell)になっています。(中略)世の中には、シェルスクリプトの先頭に #!/bin/sh と書いておきながら、 bash でしか動作しないコードを含んでいるものもあります。正しくは、そのシェルスクリプトで #!/bin/bash と書き換えるべきなのですが、 それも難しい場合があります。 (「まさおのブログ (表): Ubuntu /bin/sh -> /bin/dash → /bin/bash 切り替え」より引用)
そうなんだね。知らなかった。そもそもdashというものがあるということ自体知らなかった。
で、スクリプトの一番上を見てみたら見事に
#!/bin/sh
と書いてあった。そしてサーバのshも調べてみたところ
ubuntu@ubuntu-armhf:/bin$ ls -ltra sh lrwxrwxrwx 1 root root 4 8月 15 2012 sh -> dash
ってなってた。ビンゴだね。これをdashではなく、bashで実行すればSyntax errorもなくなるだろう。
ってことでスクリプトの一番上を以下に変更。
#!/bin/bash
これで./でも動くようになった。
とりあえず解決。