私は最近プログラミングを始めました。私はcプログラムを含むシェルスクリプトを持っています。スクリプトの最後に、コマンドを使用してcプログラムが実行されます。コンパイルされたプログラムが見つからないため、bashスクリプトでcプログラムをコンパイルして実行していません
このスクリプトを実行するとa.outが見つかりません。ファイルYYYYYは作成されますが、空です。どうすればこの問題を解決できますか?私はLinuxのubuntu 16.04 LTSです。
私は最近プログラミングを始めました。私はcプログラムを含むシェルスクリプトを持っています。スクリプトの最後に、コマンドを使用してcプログラムが実行されます。コンパイルされたプログラムが見つからないため、bashスクリプトでcプログラムをコンパイルして実行していません
このスクリプトを実行するとa.outが見つかりません。ファイルYYYYYは作成されますが、空です。どうすればこの問題を解決できますか?私はLinuxのubuntu 16.04 LTSです。
シェルは現在のディレクトリでは見つからないため、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
注意を。おそらくより堅牢なエラーチェックを追加することをお勧めします。
うわー!!!これは魔法です。私はあなたが行った変更の影響を完全には理解していませんが、効果があります。必要な出力は生成されましたが、これを呼び出す別のスクリプトを実行すると、インストールされたソフトウェアによってはエラーメッセージが表示されます。それは私が世話することができます。ありがとう – nikki
すべての '&&'は最初に失敗した場合にコマンドを短絡します。 gccのstadist.c -lmの場合は(ほぼ)同等です。 ./a.out ...; fi'シェルがバイナリをどのように検索するかについては、 IMOは理解するのが非常に重要ですが、デフォルトでは現在のディレクトリを調べないので、コマンドを相対パスで参照することによって明示的に指示する必要があると言うだけで十分です。 –
あなたはあなたのシェルスクリプトが何をしているのか完全に把握していないようです。スクリプトを実行するときに "./a.out:not found"が表示された場合、プログラムが正しくコンパイルされなかったことを意味します。これは、おそらくあなたのソースファイルを実際に削除するという意味です。つまり、スクリプトはたかだか1回しか動作しません。 stadist.cがまだどこかにあることを確認して、スクリプト外でコンパイルして実行しようとしてください。
シェルスクリプトが何をするように設定されているのか把握していますが、残念ながらそれはどうしていません。私はこれで3カ月未満です。 stadist.cはそれ自身のファイルではありません。それはシェルスクリプトに連結されます。スクリプトの中にはいくつかの行の後に次のようなものがあります:cat> stadist.c << EOFの後に他の行が続きます。コマンド:rm stadist.cは、メインのシェルスクリプトが損なわれていないので問題ではないかもしれません。それはまた、スクリプトの外で実行することはできません。それは入力のためのスクリプトを必要とし、スクリプトはその出力を必要とします。これは私が理解するものです。私の知識はこのテーマではまだ限られています。ありがとう – nikki
あなたが提供している以上にスクリプトがある場合は、スクリプト全体を表示する必要がありますか? stadist.cは自分で書いたプログラムですか、それともランダムなプログラムですか?私はもう少し情報を提供する必要があると思うので、元の質問をより多くの情報で編集することをお勧めします。 – ihaba
あなたのプログラムはコンパイルされていないと言っていますか? –
'私はCプログラムを含むシェルスクリプトを持っています。 '.... ummmあなたはそれを言い換える必要があるかもしれません。 –
スクリプトが*ソース*を削除するのはなぜですか? –