Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。1,522件21シェルスクリプトをコマンドラインからしか実行できないようにしたいです。そこで思いついたのが、pythonで見たことある以下の書き方です。passシェル(bashを想定)でもこんな簡単に出来るでしょうか。そもそも別の方法があればご教示頂きたいです。特殊変数の$0と実ファイル名を比較する方法だと、実ファイル名を変更した時にスクリプト内のファイル名も修正しないといけない気がしてます。そこで上記のpythonのようなやり方がベストかなと思いついたところです。0:47コメントありがとうございます。別のシェルスクリプトファイルからは実行できない(読み込まれない)ようにしたいという意味です。foo.shを実行させたくないファイルとして。スクリプトファイル内からのみ実行できないようにする事が可能かという意味合いです。そもそも「なぜ」したいのかを提示いただくと代案が出るかもしれないです。0冒頭に入れておけばスクリプトがsourceされた時にreturnします。他のスクリプトの中で実行されるパターンを潰すのであれば、親プロセスから実行コマンドを確認するのがスマートかなぁと思います。1bashの前についているハイフン-はログインシェルを意味します。個の銅バッジ${BASH_SOURCE[0]}は初めて知りました。ありがとうございました。抑止しても目的は果たせない感じがしますね。2:17sourceじゃなくて実行された場合の回避方法について追記しました。実行を禁じる目的が協調的か攻撃的かで結局やることが異なりそうな予感がします。|4別のシェルスクリプトファイルからは実行できない(読み込まれない)ようにしたいシェル変数$SHLVLを使えば、要望に近いことは実現できます。以下はbar.shからfoo.shを呼び出す例です。./bar.shWorld!ただし、新しいシェルを起動せずにbar.shを呼び出したり、シェルレベルが2以上の状態でfoo.shを呼び出すケースには対応できません。個の銅バッジ詳しく回答いただきありがとうございます。ケースバイケースでしょうが参考になりました。|2Shebang行を読んだOSにより実行された場合に、特定の環境変数を設定する方法を考えてみました。"1"かどうかで処理を分けることが出来ます。'shebang行の設定により起動されました'Pythonなどでも同じように出来ます。os.environ['__SHEBANG__']print('shebang行の設定により起動されました')Shebang行にPerlを使っているのは以下を満たすコマンドがPerlしか思い付かなかったからです。環境変数を設定出来る与えられた引数をそのまま渡して別プロセスを起動できる上記の処理を、空白を含まない一つの引数で指示できる(Shebang行の引数部分に空白があった場合、OSによって扱いが違います。Linuxの場合、空白を含んだ一つの引数と見なされますが、空白で区切られた複数の引数と見なすOSもあるようです。個の銅バッジ回答マークはついてませんが、質問の問題を解決できる手法はこちらだけのようですね。|0callerを使って呼び出し元をチェックできます。shでも動くと思います。個の銅バッジすみません。質問を勘違いしていました。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。importについて。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。