
環境変数には 2 つの用途があると考えられますSHELL
。
- これは、相互の作用ユーザーが使用したいシェル、および/または
- プロセスでは、通常の慣用句でコマンドを置き換えて、他のコマンドを実行するためにこれを使用できます
/bin/sh -c "..."
。
前者のみに使用される場合、非常に奇妙なものになる可能性があります(例)。後者にも使用される場合は、パラメータを理解して環境をそのまま維持するipython
など、POSIX互換性の基本的な形式を提供する必要があります(-c
これは驚くほど難しい)。
のPOSIX標準ここではあまり明確ではありませんが、単に書いています。
この変数は、ユーザーが好むコマンド言語インタープリタのパス名を表します。このインタープリタが IEEE Std 1003.1-2001 の「Shell and Utilities」の第 2 章「Shell Command Language」の「Shell Command Language」に準拠していない場合、ユーティリティは IEEE Std 1003.1-2001 で説明されているものと異なる動作をする可能性があります。
SHELL
2 番目の使用法は実際に一般的かつ/または有効なので、奇妙な設定にした場合、心配する必要があるのでしょうか?
答え1
POSIX C APIはいずれもSHELL
環境変数を明示的に使用しません。system
そしてpopen
関数はと呼ばれるプログラムを呼び出す必要がありますsh
。いくつかのユーティリティ(例:ex
、mailx
、…)は を使用する必要があります$SHELL
が、常にユーザー提供のコードを実行します。make
明示的に無視します$SHELL
。
セクション環境変数許可するユーティリティ$SHELL
ただし、C API (「システム インターフェイス」) は、 POSIX sh に準拠していない場合は異なる動作をします。
実際には、SHELL
ユーザーのログイン シェルに設定されますが、POSIX と互換性がある場合とそうでない場合があります。ズッシュそして魚は人気のある代替手段です。私は 10 年間、さまざまな Unix バリアントで zsh を使用してきましたが、システム ユーティリティが失敗したことは一度もありません。時々、 sh スクリプトを実行する$SHELL
代わりに、ずさんなコードが呼び出されるのを見たことがあります。これは非常にまれなことであり、好きなようにsh
設定することを思いとどまらせる必要はありません。SHELL
つまり、はい、これSHELL
はお気に入りの対話型シェルであり、アプリケーションはそれが受け入れる構文や-c
オプションを受け入れるかどうかさえ保証されません。