$SHELL環境変数は対話型シェルにのみ適用されますか?

$SHELL環境変数は対話型シェルにのみ適用されますか?

環境変数には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。いくつかのユーティリティ(例:exmailx、… )を使用する必要が$SHELLありますが、常にユーザー提供のコードを実行してください。make明示的に無視されます$SHELL

このセクションは次のとおりです。環境変数許可する便利$SHELLただし、C API(「システムインタフェース」)は、POSIX shと互換性がない場合は動作しません。

実際には、SHELLPOSIX 準拠であってもなくてもよいユーザーのログインシェルに設定されます。ジッシュそして人気のある選択肢です。私は10年間、さまざまなUnixバリアントでzshを使用してきましたが、システムユーティリティのエラーは覚えていません。 shスクリプトを実行する$SHELL代わりに、呼び出すいくつかの粗末なコードを時々見ることができます。shこれは非常にまれで、SHELL必要に応じて設定するのを妨げません。

簡単に言えば、そうです。SHELLこれはあなたのお気に入りのインタラクティブシェルであり、アプリケーションはどの構文を許可するのか、それともoptionsを許可するのかを保証しません-c

関連情報