特定のスクリプトを使用したいユーザーが特定の実行形式に従うように制限し、スクリプトに従わない場合は画面にエラーメッセージを出力したいと思います。ユーザーが次の形式でのみスクリプトを実行したいと思います。
$ 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" ]
最良の方法は、インタプリタパスがで始まるかどうかを確認することです/bash
。sh
システムが Bash でない場合は、確認するだけで$BASH
十分です。
正直言って、あなたはおそらく間違った問題を解決していると思います。しかし、これはあなたが望むものを解決します。