与えるか言うか

与えるか言うか

shebangでプログラムを使用したいので、<myscript>というスクリプトを作成します。

#!<mypgm>

また、コマンドプロンプトから<mypgm>を直接実行できることを願っています。

<mypgm> args...

これまでは問題ありません。

パラメータを使用してコマンドプロンプトで<myscript>を実行できるようにしたいです。

<myscript> blabla

その後、shebangは次のパラメータを使用して<mypgm>を呼び出します。

<mypgm> <myscript> blabla

shebangを使っていつ<mypgm> <myscript> blablaを呼び出すべきかを知る必要があります。

myscript blabla # uses the shebang
-or-
<mypgm> myscript blabla   # directly in the command prompt.

環境変数を確認しました(編集:<====偽の主張(??、??」))、プロセステーブル(また親プロセス)にありますが、違いを作成する方法が見つかりませんでした。

これまで私が見つけた唯一のことは次のとおりです。

grep nonvoluntary_ctxt_switches /proc/$$/status

その行がshebangの直後にある場合、shebangを介して呼び出す場合、値は通常2(時々3)、直接呼び出す場合は通常1(時々2)です。不安定でプロセススケジューリング(プロセスがCPUから切り離される回数)に依存しているので、ここでより良い解決策がある人がいるかどうか疑問に思います。

ベストアンサー1

myprgそれがshebangで使用されているかどうかを魔法のように検出するのではなく、コマンドライン-fフラグ(たとえば)を使用してファイルをスクリプトに渡して明示的に作成するのはどうですか?

コメントの例では:

上記の計算理論の例では。 calc PI + 14.14159を返す必要があります... shebang(つまり、最初の引数としてファイル名)のサポートを追加すると、ファイルに含まれる計算が返されます。

calcスクリプトファイルをインポートし、-f次のコマンドを使用してスクリプトを作成します。

#!/usr/local/bin/calc -f
$1 + 1

ファイルを呼び出してaddone.calc実行可能にしたとしましょう。その後、次のように呼び出すことができます。

$ ./addone.calc PI
4.141592...

呼び出しはへの呼び出しに変換されるため、どの引数が/usr/local/bin/calc -f ./addone.calc PIスクリプトファイルであり、どの引数がスクリプトの引数であるかがわかります。

awkこれは行動パターンと行動に似ていますsed

似ているが逆のアプローチは、calc基本的にスクリプトファイル引数を使用します(shebangとの使用を簡素化します)、コマンドラインフラグを追加して引数の式と一緒に使用することです。これも同様に機能しますsh -c '...'

おすすめ記事