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
呼び出されると、sh
POSIXモードで実行され、すべての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モードでプロセスを置き換えることができます。