質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

Q&A

解決済

1回答

1014閲覧

java 一括コンパイルについて

mori__mori

総合スコア4

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

0グッド

1クリップ

投稿2022/11/09 17:16

前提

javaの複数ファイルを一括でコンパイルしたいのですが,コンパイルエラーとなるファイルが含まれているためそれ以降のファイルをコンパイルすることが出来ません.

実現したいこと

複数ファイルを一括でコンパイルする.
コンパイルエラーとなるファイルは飛ばしてコンパイル可能なファイルはすべてコンパイルする.
現状,main_002.javaがコンパイルエラーとなる場合,001のみコンパイルされ003以降のファイルはコンパイルされないです.(より正確に言うと繰り返し処理が2回目で終了してしまう)
コンパイルエラーとなった場合にはスキップして,最後まで処理を繰り返して可能なファイルだけコンパイルするにはどのように例外処理を書けば良いでしょうか?

bash

1#!/bin/bash 2 3hoge="000" 4for i in {1..200} 5do 6 hoge=$((hoge+1)) 7 PADDING_N=$(printf "%03d" $hoge) 8 javac main_$PADDING_N.java 9done

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dameo

2022/11/09 22:33

shell scriptは基本的にエラーでは停止しませんよ shebangに-eが書かれてるとかset -eされてるとかそういうことでは? 例) #!/bin/bash # set -e for i in {1..5} do PADDING_N=$(printf "%03d" $i) if [ "$i" = "3" ] then GOMI="xxxxx" else GOMI="" fi cat >main_$PADDING_N.java <<EOF class main_$PADDING_N { $GOMI public void hoge() {} } EOF done for i in {1..5} do hoge=$((hoge+1)) PADDING_N=$(printf "%03d" $hoge) javac main_$PADDING_N.java done
shiketa

2022/11/09 23:53

カレントディレクトリにある *.java ファイルをjavacに食わせたいだけなら、hogeしなくても、これで済みますけど。 `$ for f in *.java ; do javac $f ; done`
otn

2022/11/10 00:44

このシェルスクリプトは具体的にどういう方法(コマンドライン)で実行していますか?
mori__mori

2022/11/10 05:06

皆さんコメントありがとうございます. otnさん,コマンドラインでは`bash XXX.sh`として実行しています. shiketaさんのコメントの通り書き換えて実行したところ,dameoさんの言う通りエラーで停止することなく実現したいことができました. 加えて質問になるのですが,初めに私が提示したものとshiketaさんが提示してくださったものとでは本質的には差異がないように思えるのですが,実際は両者の間には何か大きな違いがあるのでしょうか? また,初めはコマンドラインに直接`javac *.java`として実行していましたが,その時にも同様にして上手くいきませんでした.こちらでも上手くいかない理由等ご存じでしたらお聞きしたいです.
shiketa

2022/11/10 09:02

> その時にも同様にして上手くいきませんでした なにをしたいのかよくわかりませんが、コンパイルエラーが多すぎて、javacがあきらめているのでは。 https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/javac.html -Xmaxerrs number -Xmaxwarns number あたりをどでかく指定すれば、あきらめが悪くなるかも。
otn

2022/11/10 14:59

もしかして、bash -e XXX.sh と実行したのかと思ったのですが、そうじゃないとすると、 ・勘違いで実際は続行している ・実行したコードと質問に書いたコードが違う のどちらかです。
dameo

2022/11/10 23:16

shiketaさんので挙動が変わったのであれば、違いがよく分かりません。 aliasで alias bash="bash -e" くらいかなぁと思ってたんですが、それもshiketaさんのパス展開だと止まらない理由の説明ができないですね。 何か新しい事実が出てこない限り、私の手には余りそうです。
guest

回答1

0

自己解決

コメントしてくださった方々のおかげで解決しました.
ありがとうございます.

投稿2022/11/12 17:35

mori__mori

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問