bashがsh互換(posix)モードで動く時

Bourne-again shell(bash) Bourne shell(sh) の置き換えとして作られたものなので、sh の機能をほぼ引き継いだ上で、機能拡張されている。
ただし、sh と完全互換ではないので、bash のみに存在する非互換機能を意図せず sh で実行しようとすると、当然エラーになる。

bash posix モード

以下のケースで bash シェルが sh 互換の posix モードで実行されるようになる

  • bash が sh コマンドで起動された時(shebang 含む)
  • bash が --posix オプションとともに起動された時
  • bash 起動中に posix オプションが有効にされた(set -o posix)とき

sh 非互換機能で実験

bash にはあって sh にはない機能の一つに process substitution がある。この拡張機能で bash/posix モードの違いを確認

# bash mode
$ bash -c "echo <(ls)"
/dev/fd/63

# posix mode
$ bash --posix -c "echo <(ls)"
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `echo <(ls)'

sh のシンボリックリンク先

RedHat 系

CentOS6 の sh は

$ ls -l /bin/sh
lrwxrwxrwx. 1 root root 4 Nov 13  2013 /bin/sh -> bash

と bash へのシンボリックリンクになっているので、sh も bash も同じだよねーと思っていると痛い目にあう。

Ubuntu 系

Ubuntu は Ubuntu で sh は同じく Bourne shell 系で bash とは別の Debian Almquist shell(dash) へのシンボリックリンクになっていて、これまた sh/bash との互換性でハマりポイントがたくさんある。

References

Advertisements
Tagged with: ,
Posted in linux
One comment on “bashがsh互換(posix)モードで動く時
  1. […] 参考の参考:bashがsh互換(posix)モードで動く時 | Siguniang's Blog […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives

Error: Twitter did not respond. Please wait a few minutes and refresh this page.

%d bloggers like this: