
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/bash
Bash Shebangのないシェルプログラム(最初の行にはありません)
/etc/profile.d/
ただし、スクリプトがソースを取得できず、xpg_echo
オプションが呼び出しシェルから継承されないため、次の状況では機能しません。
- シェルスクリプト(例:)を引数
echo "a\tb"
として実行すると、例:bash
bash /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オプションを見つけます。