Debianで、#!/bin/shから始まるシェルスクリプトを実行しようとして、以下のように怒られるときがあります

1
./hoge.sh: 5: ./hoge.sh: Syntax error: newline unexpected (expecting ")")

これは、DebianやUbuntuなどのDebianベースのディストリで、/bin/shのシンボリックリンクがDebian Almquist shell(dash)へのリンクになっているため

1
2
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 1月 24 2017 /bin/sh -> dash

これを、/bin/bashに変更します(もし、dpkg-reconfigureをnon-interactiveにする場合はexpectを使います)

1
2
3
4
5
6
7
8
9
$ sudo dpkg-reconfigure dash -freadline
dash を設定しています
---------------------

システムシェルはシェルスクリプト用のデフォルトのコマンドインタプリタです。

dash をシステムシェルとして使うことは、システム全体のパフォーマンスを改善します。対話的に利用しているユーザのシェルについては、変更しません。

dash をデフォルトのシステムシェル (/bin/sh) として使いますか? [はい/いいえ] Y
1
2
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 3月 1 14:06 /bin/sh -> bash