環境変数には2つの可能な用途がありますSHELL
。
- 指定に使用できます。インタラクティブユーザーが使用したいシェルおよび/または
- プロセスはそれを使用して他のコマンドを実行し、一般的なイディオム
/bin/sh -c "..."
のコマンドを置き換えることができます。
前者(例:)にのみ使用されている場合は奇妙ですが、後者にも使用される場合は、引数を理解し、環境をそのまま維持するなど、基本的なipython
形式のPOSIX互換性を提供する必要があります(-c
これはとても面倒です。)。
これPOSIX規格ここではあまり明確ではありません。ただこう書かれています。
この変数は、ユーザーが好むコマンド言語ソルバーのパス名を表す必要があります。このインタプリタがIEEE Std 1003.1-2001、第2章、シェル、およびユーティリティボリュームのシェルコマンド言語に準拠していない場合、ユーティリティはIEEE Std 1003.1-2001に記載されているものとは異なる動作をする可能性があります。
2番目の用途は実際には一般的または有効ですが、奇妙なものに設定した場合は何を心配する必要がありますかSHELL
?
答え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
これはあなたのお気に入りのインタラクティブシェルであり、アプリケーションはどの構文を許可するのか、それともoptionsを許可するのかを保証しません-c
。