Movatterモバイル変換


[0]ホーム

URL:


BLOGTIMES

cles::blog

平常心是道
« :: »
2013/11/20

bash で超簡易なテストドライバを書く

  sh  testing 
このエントリーをはてなブックマークに追加

プログラムをひとつひとつ起動して、いくつかのテストケースを標準出力に放り込むという作業をひたすらやるという一種のルーチン作業を毎週こなしているのですが、いい加減面倒になってきたので bash を使って少し自動化することにしました。今回はあまり時間もかけられないので bash で簡単なスクリプトを組んで済ますことにしました。

汎用化することを考えると、1つのテストケースがテキスト1行に対応すると分かりやすいので、read を使ってファイルを1行ずつ読んでプログラムの標準入力に放り込むことにします。というわけで、下記のようなコードを書いてみました。これで単純なケースではうまく行ったのですが、問題は下記のようにテストケースの途中に改行が入っていたりするとうまく動かないこと。

test.sh

#!/bin/bashwhile read line ; do echo -e "$line" | awk '{print NR,$0}' echo "---"done <<EOTaaa\nbbb\ncccddd\neee\nfffggg\nhhh\niiijjj\nkkk\nlllEOT

どうやら read が \ をメタキャラクタだと解釈してまうのが問題のようです。

$ ./test.sh1 aaanbbbnccc---1 dddneeenfff---1 gggnhhhniii---1 jjjnkkknlll---

これまでも read はIFS を変更して TSV を解釈させたりといろいろやっていますが、ちゃんと read のマニュアルを読んだことがなかったので、この機会に bash の read リファレンスに目を通してみます。このread は bash のビルトインコマンドなので、which read としても見つかりませんし、man read とすると bash のビルトインのマニュアルが出てきます。

すぐに-r が \ をエスケープキャラクタと見なさなくなる設定だということが分かりました。

test2.sh

#!/bin/bashwhile read -r line ; do echo -e "$line" | awk '{print NR,$0}' echo "---"done <<EOTaaa\nbbb\ncccddd\neee\nfffggg\nhhh\niiijjj\nkkk\nlllEOT

これで予想どおり動くようになったので、一件落着。

$ ./test2.sh1 aaa2 bbb3 ccc---1 ddd2 eee3 fff---1 ggg2 hhh3 iii---1 jjj2 kkk3 lll---

    byhsur at 23:01[5年前][4年前][3年前][2年前][1年前][1年後][2年後][3年後][4年後][5年後] |
    こんな記事もあります 「プログラム テストケース test.sh
    Google が AI によるファイル判別ツールをリリース
    Windows Update の日 ( 2024 年 2 月 )
    Windows にも sudo が導入される
    犯罪行為を補助する生成 AI が問題に
    Windows Update 初めをしよう ( 2024 年 1 月 )
    Windows Update の日 ( 2023 年 12 月 )
    Windows Update の日 ( 2023 年 11 月 )
    Windows Update の日 ( 2023 年 10 月 )
    Windows Update の日 ( 2023 年 9 月 )
    Windows Update の日 ( 2023 年 8 月 )
    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/6285
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL:Yahoo! JAPAN IDでログイン

    « :: »
    Copyright © 2004-2023 by CLES All Rights Reserved.
    サイト内検索
    検索ワードランキング
    へぇが多いエントリ
    閲覧数が多いエントリ
    1 .アーロンチェアのポスチャーフィットを修理(99788)
    2 .福岡銀がデマの投稿者への刑事告訴を検討中(99173)
    3 .年次の人間ドックへ(99163)
    4 .三菱鉛筆がラミーを買収(98771)
    5 .2023 年分の確定申告完了!(1つめ)(98734)
    最新のエントリ
    cles::blogについて
    誰が書いてる?
    最近行った場所
    サイトポリシー
    タグ一覧
    検索ワードランキング

    Referrers

      Powered by CLES
      Nucleus CMS v3.31SP3/w memcached
      21377509(W:8134 Y:1277 T:0331)
      cles::blogのはてなブックマーク数
      benchmark


      [8]ページ先頭

      ©2009-2025 Movatter.jp