2017-07-06 10 views
0

私は最近プログラミングを始めました。私はcプログラムを含むシェルスクリプトを持っています。スクリプトの最後に、コマンドを使用してcプログラムが実行されます。コンパイルされたプログラムが見つからないため、bashスクリプトでcプログラムをコンパイルして実行していません

このスクリプトを実行するとa.outが見つかりません。ファイルYYYYYは作成されますが、空です。どうすればこの問題を解決できますか?私はLinuxのubuntu 16.04 LTSです。

+0

あなたのプログラムはコンパイルされていないと言っていますか? –

+2

'私はCプログラムを含むシェルスクリプトを持っています。 '.... ummmあなたはそれを言い換える必要があるかもしれません。 –

+2

スクリプトが*ソース*を削除するのはなぜですか? –

答えて

1

シェルは現在のディレクトリでは見つからないため、a.outが見つかりません。それがベストプラクティスです。 (すなわち、ではなく、.をPATHに追加します)。ただ、やる:スクリプトはコンパイルが失敗した場合a.outを実行しようとしないように、私はgccの呼び出しの後&&を追加

gcc stadist.c -lm && 
./a.out < XXXXX | sort -n -k3 > YYYYY 
rm a.out 
rm stadist.c 
rm XXXXX 

注意を。おそらくより堅牢なエラーチェックを追加することをお勧めします。

+0

うわー!!!これは魔法です。私はあなたが行った変更の影響を完全には理解していませんが、効果があります。必要な出力は生成されましたが、これを呼び出す別のスクリプトを実行すると、インストールされたソフトウェアによってはエラーメッセージが表示されます。それは私が世話することができます。ありがとう – nikki

+0

すべての '&&'は最初に失敗した場合にコマンドを短絡します。 gccのstadist.c -lmの場合は(ほぼ)同等です。 ./a.out ...; fi'シェルがバイナリをどのように検索するかについては、 IMOは理解するのが非常に重要ですが、デフォルトでは現在のディレクトリを調べないので、コマンドを相対パスで参照することによって明示的に指示する必要があると言うだけで十分です。 –

0

あなたはあなたのシェルスクリプトが何をしているのか完全に把握していないようです。スクリプトを実行するときに "./a.out:not found"が表示された場合、プログラムが正しくコンパイルされなかったことを意味します。これは、おそらくあなたのソースファイルを実際に削除するという意味です。つまり、スクリプトはたかだか1回しか動作しません。 stadist.cがまだどこかにあることを確認して、スクリプト外でコンパイルして実行しようとしてください。

+0

シェルスクリプトが何をするように設定されているのか把握していますが、残念ながらそれはどうしていません。私はこれで3カ月未満です。 stadist.cはそれ自身のファイルではありません。それはシェルスクリプトに連結されます。スクリプトの中にはいくつかの行の後に次のようなものがあります:cat> stadist.c << EOFの後に他の行が続きます。コマンド:rm stadist.cは、メインのシェルスクリプトが損なわれていないので問題ではないかもしれません。それはまた、スクリプトの外で実行することはできません。それは入力のためのスクリプトを必要とし、スクリプトはその出力を必要とします。これは私が理解するものです。私の知識はこのテーマではまだ限られています。ありがとう – nikki

+0

あなたが提供している以上にスクリプトがある場合は、スクリプト全体を表示する必要がありますか? stadist.cは自分で書いたプログラムですか、それともランダムなプログラムですか?私はもう少し情報を提供する必要があると思うので、元の質問をより多くの情報で編集することをお勧めします。 – ihaba

関連する問題