cshスクリプトが時々/etc/csh.cshrcのソースコードを取得できないのはなぜですか?

cshスクリプトが時々/etc/csh.cshrcのソースコードを取得できないのはなぜですか?

%postインタプリタラインを#!/bin/csh(オプションなし)に設定してrpmで実行されるcshインストール後のスクリプトがあります-f/etc/csh.cshrc2つのマニュアルページによると、残りのスクリプトが実行される前にファイルを読み取る必要があります。bsd-csh(1)そしてtcsh(1)/etc/csh.cshrcスクリプトが正しく機能するために依存する特定のシステム全体の環境変数とエイリアスが定義されています。予想される動作は、cshがスクリプトを実行するときに最初にシステム全体の定義をインポートし、次にスクリプトが正常に実行されることです。

これは少なくとも特定の条件下で動作します。 cshスクリプトは常に%postrpmセクションで同じ方法で呼び出されます。ただし、アプリケーションrpmのインストールをどのように行うかによって、スクリプトが期待した変数を取得できず、エラーが出ることもあり、/etc/csh.cshrcまったくソースが出ないことがありそうです。インストールは、sudo、ssh、cronを介してrootログインシェルで実行することも、他のプロセスから起動することもできます。そのうちの少なくとも1つは/etc/csh.cshrcブロックソースにわずかな違いをもたらします。-fマニュアルページには、この問題を引き起こすオプション以外には何も表示されません。

答え1

$HOME違いは、環境変数が欠落していることを示しています。環境で定義されていない場合、$HOMEcshまたはtcshは起動ファイルをまったくインポートしません。 cshは、欠落している変数を与えられた$HOMEコマンドラインオプションとまったく同じに解釈します。-f

これは、シェルの起動ファイルと~/.cshrcユーザーのホームディレクトリを考慮すると意味があります。定義されていない~/.login場合、$HOMEこれらのユーザー固有のファイルをロードできません。ただし、$HOME定義されていない場合、cshはシステム全体の起動ファイルやユーザー固有の起動ファイルを含むすべての起動ファイルの検索をスキップします。

cshスクリプトを実行する前に$HOMEユーザーの実際のホームディレクトリであるか空の一時ディレクトリであるかにかかわらず、有効なディレクトリを定義すると、cshソースコードが/etc/csh.cshrc期待どおりに機能します。

この機能を説明または説明する文書が見つかりませんでしたが、bsd-cshとtcshのソースコードはこの動作を確認します。

答え2

cshが実際に実行されていることを確認してください!

which cshcshの場所を取得するには実行します。

走るls -l /path/returned/by/which/csh

私の場合はcsh何とかtcsh

関連情報