Linux RedHatシステム(7.4)で実行されるすべてのシェルに対してbashのxpg_echo
オプションをオンにする方法を理解しようとして問題が発生しています。
shopt -s xpg_echo
を使用することで、必要なものを入手できることを知っています(目的は、すべてのシェルがHP-UXサーバーから移植されるため、いつでもバックスラッシュエスケープを拡張することです)。ほとんどの場合、正常に機能します。
今私の問題は、このオプションを「システム全体」または「グローバルに」オンにして、実行するすべてのシェルがそれを使用するようにすることです。
shopt -s xpg_echo
を/etc/profile.d/myshell.sh
の1つのカスタムシェルに入れてみました。
それは以下のためにうまく働いています:
/etc/bashrc
から供給されます)/etc/profile
から取得)#!/bin/bash
はありません)しかし、/etc/profile.d/
スクリプトがソースされておらず、xpg_echo
オプションが呼び出し元のシェルから継承されていないため、次の場合に機能させることができません。
echo "a\tb"
を使用)をbash
引数として実行する場合。 bash /tmp/mytest.sh
#!/bin/bash
)があるシェルスクリプトを実行する場合シェルを実行する必要があるすべての条件でシェルオプションxpg_echo
をオンにする方法があるかどうか知りたいのですが。
注意:私はGNU bash、バージョン4.2.46を使用しています
別の 関連トピック を教えてくれてありがとう。
私にとって重要なのは、BASH_ENV変数を使用することでした。
Bashのリファレンスマニュアルに記載されているように、 シェルを開くいくつかの方法 があります。問題を引き起こしたのは、「非対話的に」呼び出されたときでした。
非対話型シェルが/etc/profile
も/etc/bashrc
も実行しないという事実を回避するために、/etc/profile.d/
に専用のシェルスクリプトを作成しました。 「custom_shopts.sh」には、すべてのセッションに必要なshoptオプションのみが含まれ、この同じスクリプトで変数BASH_ENV=/etc/profile.d/custom_shopts.sh
をエクスポートします。
したがって、私が実行するすべてのシェル(ログインシェル、インタラクティブシェル、または非インタラクティブシェル、ただしbash --posix
を除く)では、/etc/profile.d/custom_shopt.sh
シェルスクリプトが実行され、ショップオプションが配置されます。 m期待しています。