[bash] ヒアドキュメントでquit

2018年10月1日月曜日

bash シェルスクリプト

終了コマンドが必要になる場合

sqlplusやbcのように実行終了時にquitといった終了コマンドが必要になる場合、シェルスクリプトからファイルを実行する時にファイルに終了コマンドが入っていないと終了しない。

例えば、以下の場合、run.shを実行すると、1を表示した後に標準入力からの入力待ちになってしまう。
$ cat 1.bc
print 1, "\n"
$ cat run.sh
#!/bin/sh
bc -q 1.bc
$ ./run.sh
1

もちろん、1.bcの末尾にquitを入れるのも手だけど、、複数のファイルを1コマンドで実行する時に少々面倒になる。

quit専用のファイル

これを解決する単純な方法はquit専用のファイルを用意すること。
$ cat quit.bc
quit
$ cat run.sh
#!/bin/sh
bc -q 1.bc 2.bc quit.bc
$ ./run.sh
1
2
$

ヒアドキュメントでquit

このタイプのツールはコマンドライン引数に複数のファイルを指定できるけど、それらを全て読み込んでも、そのあとさらに標準入力から読み込もうとするので、こういう問題が起こる。
これを逆手に取れば、標準入力にquitを送り込んでやればいいことになる。

ので、ヒアドキュメントでquitを付け加えてみる。
$ cat run2.sh
#!/bin/sh
bc -q 1.bc 2.bc <<EOF
quit
EOF
$ ./run2.sh
1
2
$

quit専用のファイルを用意するのとどちらがいいかというと、微妙なところではありますが...