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

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

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

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

2回答

1780閲覧

bashについて forのループ中にdiffコマンドを挟むと差分の戻り値が返されてループを抜けてしまう

emerica

総合スコア19

bash

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2020/01/28 09:45

編集2020/01/28 10:05

bashでシェルファイルを作成していて下記のうような配列のループを作成した際に
diffで差分があると、出力結果に差分が表示されてループを抜けてしまいシェルファイルの最後まで到達しない。

bash jqdiff() { diff $1 $2 } for (( I = 1; I < ${#target_path1[*]}; ++I )) do cnt2=`expr $cnt2 + 1` echo "##########$cnt2" echo ${target_path1[I]} echo ${target_path2[I]} # diff start jqdiff ${target_path1[I]} ${target_path2[I]} #cat ${target_path2[I]} | $json_pretty done echo "END" exit 0
出力 ##########1 /var/www/USER/diff/HOGE1.json /var/www/USER/diff/HOGE2.json Files /dev/fd/63 and /dev/fd/62 are identical ##########2 /var/www/USER/diff/HOGE3.json /var/www/USER/diff/HOGE4.json 24c24 < "hogehoge": "2020-01-12T15:00:00Z", --- > "hogehoge": "2020-01-27T15:00:00Z", 43c43 < "hoge_time": "2019-12-27T15:00:00Z" --- > "hoge_time": "2020-01-12T15:00:00Z" 46c46 < "hoge_length": 384 --- > "hoge_length": 360

こちら、配列すべてループ回す方法ありますでしょうか?

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

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

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

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

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

otn

2020/01/28 09:59 編集

これで全文ですか?shbang行もなし?
emerica

2020/01/28 10:08

全文じゃないです 手前にはjsonファイルのフルパスが格納されている配列を作るるスクリプトが記載されています。 単純にdiffコマンドだと戻り値がリターンされて途中で返されているのか、diffコマンドのオプションで解決できるか等が知りたいです
amura

2020/01/28 23:30

表示文字に問題が有るかも? diff $1 $2 >>test.log を試してみてはどうでしょうか。
guest

回答2

0

ご指摘の通り、
set -eu
こちらの記載がありました。
有難うございました

投稿2020/01/29 01:56

emerica

総合スコア19

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

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

0

ベストアンサー

何らかの理由で-eオプションが有効になってしまっているように思います。

追記依頼に書いたように、質問に書いてない部分があり、そこで-eをセットしているとしか思えません。
その場合は、-eをやめれば解決します。

そうでないとすると、BASH_ENVがセットされていてそのファイルの中でset -eしているというちょっと考えにくい環境ですね。

投稿2020/01/28 10:08

otn

総合スコア84499

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問