- ベストアンサー
シェルスクリプトの変数の制限?
こんにちは。 シェルスクリプトで謎の現象が起こりまして悩んでいます。 現在、 #!/usr/bin/sh var='foo' if [ $? - eq - 0 ]; then mv xxx.bz2 xxx.old.bz2 echo $var | bzip2 -z >xxx.bz2 fi といった感じのシェルスクリプトを動かしています。 これを手作業で、 foo | bzip2 -z >xxx.tmp.bz2 とやると、xxx.tmp.bz2は1.2MB程度のファイルとなるのですが、 上記のシェルスクリプトで実行すると8KBほどにしかなりません。 シェルスクリプトの変数のサイズの制限かと思い、調べてみましたが、 特に制限があるとの資料はみつかりませんでした。 fooの出力がバイナリなので、そのせいかとも思ったのですが、unix系列の場合、windowsと違ってテキスト/バイナリの区別はないはずだしということで、理由がわかりません。 シェルの変数には、やはり制限があるのでしょうか?それとも他の理由でしょうか。ご存知の方がいらっしゃいましたら、ご教示お願いします。 環境はsolarisです。バージョンは、 $ cat /etc/release Solaris 10 8/07 s10s_u4wos_12b SPARC Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. Use is subject to license terms. Assembled 16 August 2007 です。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- tsuduki999
- ベストアンサー率35% (6/17)
- OKwebb
- ベストアンサー率44% (92/208)
- Tacosan
- ベストアンサー率23% (3656/15482)
お礼
なるほど、ありがとうございます。 どうやら変数に入れないほうがいいのは確かなようですね。 >ただ、ステータスを調べるのは面倒。パイプのステータスはパイプの最終段のコマンドつまりbzip2のステータスになります。 はい、ステータスを調べる必要があるので・・。必要なければ素直に foo | bzip2 -z >xxx.tmp.bz2 で、よかったのですが。 >status=`((foo ; echo $? >&3) | bzip2 -z >xxx.tmp.bz2) 3>&1` >if [ $status = 0 ] >then mv xxx.bz2 xxx.old.bz2; mv xxx.tmp.bz2 xxx.bz2 >else rm xxx.tmp.bz2 >fi 参考になります。試してみます。
補足
うまくいきました。ありがとうございます。