3

環境変数を変更するには、tcshスクリプトを入手する必要があります。

いくつかのテストが行​​われることになっており、失敗した場合は、シェルを終了せずにソーシングを停止する必要があります。サブプロセスでは実行できない親プロセスの環境変数を変更する必要があるため、スクリプトをサブプロセスとして実行したくありません。これは、作成者が実際にスクリプトをサブプロセスとして実行できるこの質問と似ていますが、異なります。

通常の回避策は、すべてのenv var設定で一時ファイルを書き込み、最後にその一時ファイルをソースおよび削除するスクリプト(csh / bash / perl / python / ...)を実行するエイリアスを作成することです。興味のある方のための詳細情報があります(bashのソリューションのデモ)。私の非常に単純で短いものについては、追加のエイリアスは必要ありません。

sourceしたがって、私の回避策は、実行を停止する構文エラーを引き起こすことです。次に例を示します。

test $ADMIN_USER = `filetest -U: $SOME_FILE` || "Error: Admin user must own admin file"

短絡||により、問題がない場合はエラーテキストが無視されます。テストが失敗すると、エラーテキストはコマンドとして解釈されますが、見つかりません。ソースが停止し、適切なエラーメッセージが生成されます。

Error: Admin user must own admin file: Command not found.

これを行うためのより良い方法はありますか?私が見落としていたいくつかのcsh/tcshビルトイン?

4

1 に答える 1

3

ユーザーシェルターとの話し合いのおかげで、私は自分の仮定を検証しました

test $ADMIN_USER = `filetest -U: $SOME_FILE` || \
  echo "Error: Admin user must own admin file" && \
    exit

実際には、囲んでいるインタラクティブシェルを終了します。しかし、そうではありません。

したがって、上記の質問に対する答えは実際には次のとおりです。

通常exitを使用するだけsourceで、呼び出し元のインタラクティブシェルを実行したまま、スクリプトのソーシングが停止します。

于 2012-05-09T13:10:19.587 に答える