CentOS 7:/bin/shとは何ですか? Bashのように見えますが、他のものと似ています。

CentOS 7:/bin/shとは何ですか? Bashのように見えますが、他のものと似ています。

Centos 7 Dockerイメージをこのように実行すると、

docker run -it centos:7 bash

使用中のアイテムの実行プロセスの交換問題ありません。予想通り、Bashは最初からプロセス置換をサポートしました。実際にはBash 1.4.xでした。

たとえば、

while IFS= read -r test; do echo $test; done < <(cat anaconda-post.log)

しかし、私が切り替えると/bin/sh同じコードが動作しなくなりました。

/bin/sh
while IFS= read -r test; do echo $test; done < <(cat anaconda-post.log)
sh: syntax error near unexpected token `<'

しかし、/bin/shバッシュだと思います。

/bin/sh --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

ところで、プロセス置換が機能しなくなったのはなぜですか?しかし、POSIX以外の機能も機能しているようです。

echo ${PATH//:/ }
/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin

ベストアンサー1

はい、bash呼び出されると、shPOSIXモードで実行され、すべてのbashのみの機能が無効になります。マニュアルで -名前shで呼び出す

Bash が sh 名で呼び出されると、POSIX 標準に準拠しながら、sh の以前のバージョンの起動動作をできるだけ近づけて模倣しようとします。

$ ls -lrth /bin/sh
lrwxrwxrwx. 1 root root 4 Aug 26  2018 /bin/sh -> bash
$ /bin/bash -c 'set -o | grep posix'
posix           off
$ /bin/sh -c 'set -o | grep posix'
posix           on

モードが有効になっていると、posixプロセス交換などの非標準機能は有効になりません。バラよりバッシュPOSIXモードこのモードで実行される全体の動作を確認してください。

シェルバージョン5.1以降、POSIXモードでプロセスを置き換えることができます。

おすすめ記事