シェルスクリプトの実行モードを制御する方法は何ですか?

シェルスクリプトの実行モードを制御する方法は何ですか?

特定のスクリプトを使用したいユーザーが特定の実行形式に従うように制限し、スクリプトに従わない場合は画面にエラーメッセージを出力したいと思います。ユーザーが次の形式でのみスクリプトを実行したいと思います。

$ bash script.sh

別の形式で実行しようとすると

$ sh script.sh

$./script.sh

スクリプトの実行方法に関する指示を含むエラーメッセージを印刷したいと思います。

答え1

#!/bin/echo Run this script with: bash

if ! [ "$BASHOPTS" ]
then
    echo Run this script as bash script.sh
    exit 1
fi
... rest of script here ...

これは、シェルインタプリタの代わりにバイナリを./script.sh呼び出し、最初の行にメッセージを印刷した後にスクリプト名を印刷する(有用な)実行の使用を防ぎます。echo

Bashではなくシェルで実行する場合、またはBashをPOSIXモードで実行すると(Bashの場合と同様にsh)、BASHOPTSこの変数はほとんど確実に設定されず、本体がif実行され、メッセージが印刷され、エラーで終了します。

sh;として使用すると、Series 4 Bashバージョンで動作します。以前のバージョンでは、おそらくif ! [ "$BASH" ] || ! [ "${BASH##*/}" = "bash" ]最良の方法は、インタプリタパスがで始まるかどうかを確認することです/bashshシステムが Bash でない場合は、確認するだけで$BASH十分です。

正直言って、あなたはおそらく間違った問題を解決していると思います。しかし、これはあなたが望むものを解決します。

関連情報