たくさんのチュートリアルとstackexの質問/回答を読みましたが、どうやら私の質問は具体的すぎて、知識が限られすぎて解決策をまとめることができません。
[編集]私の混乱は主に私のプロジェクトが実行するためにシェルスクリプトとメイクファイルの両方を必要としたという事実によるものでした単純なpythonプログラム。それが物事を行うためのそのような回りくどい方法のように見えたので、なぜそれが必要なのかわかりませんでした。makefileとスクリプトはオートグレーダーを幸せにするためにそこにあるようです、以下の親切な回答者が述べているように、それで、これは教授に最もよく明らかにされたものだと思います。私は答えに本当に感謝しています-助けてくれてありがとう!
基本的に、私がやりたいのは、program.py
(シェルスクリプト)を介してprogram.sh
(私のソースコード)を実行することです。これにより、コマンドラインに次のように入力します。
./program.sh arg1
コマンドラインに次のように手動で入力したかのように、program.py
を実行し、arg1
をプログラムに渡します。
$ python program.py arg1
また、program.sh
を実行可能ファイルに自動的に設定する必要があるため、$ chmod +x program.sh
を事前に入力する必要はありません。
提示された解決策を読みました ここ これは非常に役に立ちましたが、これにはファイルを.py
拡張子で実行する必要があるようですが、私の特定のアプリケーションでは実行するために.sh
拡張子が必要です上記のように。
.sh
ファイルを実行したいもう1つの理由は、スクリプトと一緒にプログラムを実行するためにmakefileも含める必要があるためです(したがって、make
コマンド?)。
正直なところ、pythonプログラムにmakefileが必要な理由はわかりませんが、makefileは単にグレーディングスクリプトに便利であり、単純に書く必要があると教授から指示されました。 makefileの内容については次のとおりです。
all:
/bin/true
この件に関してご協力いただき、誠にありがとうございます。
次のコマンドでpythonスクリプトを呼び出すシェルスクリプトを作成できます:
$ python your_program.py $1
pythonスクリプトに引数を1つだけ渡す必要がある場合、その引数にスペースがないと仮定します。
Makefileが必要な場合は、シェルスクリプトを実行可能にすることができます。
Makefileはグレーディングスクリプトの便宜のためのものであることを考えると、スクリプトに呼び出しを追加する必要があるとは思えませんが、それを確認します。おそらく、グレーディングスクリプトが行うことは次のとおりです。
$ make
$ ./your_script.sh
something;を実行せずに実行可能ファイルに設定することはできません。一度で十分なので、手動で行う方がよいでしょう。 (これは、自動生成されていないファイルで私たち全員が行っていることです。)
Pythonプログラムは2つの方法で実行できます(他のインタープリター言語についても同じことが言えます)。
1)インタプリタを明示的に実行します:python program1.py arg1
、デフォルトのPythonインタプリタ(通常は/usr/bin/python
)を見つけ、スクリプトを実行するように指示します
2)スクリプトの前に「hashbang」マジックコメントを付けて、スクリプトを実行可能にします。最初の行に#!/usr/bin/python
を入力し、chmod a+x program1.py
を実行すると(program1.py
をすべての人に実行可能にします)、その後、./program.py arg1
と入力するたびに、/usr/bin/python program1.py args1
を実行したかのようになります。前に言ったように、あなたはchmod
を一度だけする必要があります。
シェルスクリプトとMakefileの両方で両方のスタイルを等しく使用できます。個別のsh
ファイルは必要ありません。
また、指示されたMakefileは何もしないため、意味がありません。あなたの教授がそれを彼自身のものと取り替えようとしているのかもしれませんし、あるいは他の説明があるかもしれませんが、all: /bin/true
はそれ自体では意味がありません。
すべての引数をpythonスクリプトに渡すシェルスクリプトが本当に必要な場合は、次のようになります。
#!/bin/sh
python program1.py "$@"