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 + 1
4.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 '...'
。