Linux Redhat 7:グローバル/システム全体にシェルオプションを設定するには?

Linux Redhat 7:グローバル/システム全体にシェルオプションを設定するには?

xpg_echo私のLinux RedHatシステム(7.4)で実行されるすべてのシェルに対してbashオプションを設定する方法を見つけるのは困難です。

私はを使用して必要なものを取得できることを知っています(すべてのシェルがHP-UXサーバーから移植されているため、常にバックスラッシュエスケープを拡張することを意図しています)、shopt -s xpg_echoほとんどの場合うまく機能します。

今私の質問は、私が実行するすべてのシェルがこのオプションを使用するように、「システム全体」または「グローバルに」オプションをどこでオンにする必要があるかです。

.shopt -s xpg_echo/etc/profile.d/myshell.sh

これは次のとおりです。

  • 対話型シェルセッション(から/etc/bashrc
  • ログインシェルセッション(から/etc/profile
  • #!/bin/bashBash Shebangのないシェルプログラム(最初の行にはありません)

/etc/profile.d/ただし、スクリプトがソースを取得できず、xpg_echoオプションが呼び出しシェルから継承されないため、次の状況では機能しません。

  • シェルスクリプト(例:)を引数echo "a\tb"として実行すると、例:bashbash /tmp/mytest.sh
  • #!/bin/bash最初の行に bash shebang( ) を使用してシェルスクリプトを実行するとき

xpg_echoシェルを実行する必要があるすべての状況でシェルオプションを有効にする方法があるかどうか疑問に思います。

注:私はGNU bashバージョン4.2.46を使用しています。

ベストアンサー1

他の場所を教えてくれてありがとう関連トピック

私にとってキーはBASH_ENV変数を使用していました。

bashリファレンスマニュアルに記載されているようにシェルを開くいくつかの方法、私にとって問題を引き起こすのは、「非対話型」と呼ばれる場合です。

/etc/profile非対話型シェルが何も実行しないという事実を解決するために、 "custom_shopts.sh"などの/etc/bashrc専用シェルスクリプトを作成しました。これ/etc/profile.d/には、各セッションで使用したいshoptオプションのみが含まれています。変数のエクスポートBASH_ENV=/etc/profile.d/custom_shopts.sh

したがって、私が実行しているすべてのシェル(ログインシェル、インタラクティブシェル、または非対話型シェルを除くbash --posix)で/etc/profile.d/custom_shopt.shシェルスクリプトが実行され、私が期待するshoptオプションを見つけます。

おすすめ記事