「set + h」を子プロセスに継承できますか?

「set + h」を子プロセスに継承できますか?

set +h呼び出されるシェルスクリプトの効果を継承できないようです。

これはシェルスクリプト(./call)です。

#!/bin/bash

set +h
export SHELLOPTS

./called

これは次のとおりです./called

#!/bin/bash

echo \$-=$-
echo SHELLOPTS=$SHELLOPTS

実行すると、./call以下が印刷されます。

$-=hB
SHELLOPTS=braceexpand:hashall:interactive-comments

エクスポート時にシェルオプションが継承されたと思いましたSHELLOPTS。これは明らかに真実ではありません。

set +h呼び出されるシェルスクリプトの効果を継承する方法はありますか?

ベストアンサー1

~からバッシュマニュアル:

SHELLOPTSに表示されるオプションは、「set -o」によって「on」と報告されたオプションです。 Bash起動環境にこの変数が含まれていると、起動ファイルを読み取る前にリスト内の各シェルオプションが有効になります。

オプションが表示されます。オフには表示されないため、SHELLOPTS新しいシェルがそれを有効または無効にするかどうかには影響しません。

次のいずれかの方法を試すことができます。

  • bash +h ./calledスクリプトの使用または実行
  • set +hファイルを挿入し、これが影響を与えると考えて、BASH_ENVそのファイルのパスを設定します。exportみんなbash インスタンスの 1 つが設定を解除するかエクスポートをキャンセルしない限り、bash インスタンスはその行に沿って起動されます。

おすすめ記事