
結果を標準出力に出すシェルスクリプトを、">"で出力先をファイルにリダイレクトして動かすと、(時間のかかる処理の間に出力ファイルサイズを見ると)増えていくはずのファイルサイズが途中で減ることがあります。
シェルスクリプト内には、csvファイルを1行読み込んでは整形出力するループ処理のrubyスクリプトがあり、ループの中、及びループの前後に標準出力があります。
シェルスクリプト内の複数のコマンド標準出力はスクリプトが終了するまで1つの書き出しになると思っていますが、いったんクローズされて次の書き込みと扱われる場合があるのでしょうか?
No.1
- 回答日時:
書き込もうとするファイルがずっと開きっぱなし何て思ってませんよね。
書き込みを行う都度開き直しますよ。
てか、追加書き込みするのに「>」は無いと思う。
使うのは「>>」です。
「>」では新規に上書きしますので、前のデータは残りません。
これがファイルサイズが減っているカラクリということはありませんか?
(前のデータよりも小さいデータを上書きしている)
銀鱗様、ありがとうございます。
次のスクリプトtmp.shでは、standard-out-from-tmp2sh.txtにtmp2.shの2つのlsコマンドの結果が書き込まれます。
これは違う事情なのでしょうか?
(tmp.sh)
#!/bin/bash
ScriptName=$(basename $0)
tmp2.sh > standard-out-from-tmp2sh.txt
(tmp2.sh)
#!/bin/bash
ls | sed ''
ls | sed 's/^/HI/'
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インストールできないですどう...
-
LinuxでWine使うとどのくらいWi...
-
Core 2 Duo の古いパソコンに最...
-
ubuntu(linux)のシャットダウン...
-
ssh接続しようとしたらエラーメ...
-
tarで纏める際に、複数場外した...
-
Lubuntuでとにかく軽量のバージ...
-
bashでシングルクォート内の変...
-
VirtualBox 6.1 → 7.1 でUbuntu...
-
CentOSが起動時にフリーズ
-
Ubuntuで数字だけのユーザーア...
-
Linux のシェルスクリプトの強...
-
「トゥ]の出し方
-
Linuxでブートディスクの交換後...
-
「/var/log」内のログの削除の...
-
ssl_request_logの必要性について
-
WSL+Dockerでpython実行環境構...
-
LinuxのPCは基本不要PC中古を使...
-
Windowsのローカルディレクトリ...
-
Fedoraのupgradeで、libruby.so...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LinuxでWine使うとどのくらいWi...
-
Core 2 Duo の古いパソコンに最...
-
VirtualBox 6.1 → 7.1 でUbuntu...
-
インストールできないですどう...
-
ubuntuのシャットダウンが進ま...
-
「トゥ]の出し方
-
Linux のシェルスクリプトの強...
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
WinSCPでLinux(CentOS6.10)に...
-
ubuntuで デイスク/deb/loopと...
-
Ubuntu on Xorgのログインについて
-
私のパソコンでVirtualBoxは使...
-
Ububtuでファイル共有できない...
-
Windowsのローカルディレクトリ...
-
Linuxでブートディスクの交換後...
-
ログにserver reached MaxReque...
-
ssl_request_logの必要性について
-
ssh接続しようとしたらエラーメ...
-
2TBのUSBメモリを2000円ほどで...
おすすめ情報
問題としているスクリプトの構造を単純化したものとして、次のスクリプトを走らせると
出力ファイルには最後に実行された結果しか記録されていませんでした。
hoge.rb出力リダイレクトを ">>" にするとすべて記録されていました。
どういう場合に、実行中のスクリプトの標準出力が閉じられるのでしょうか?
(foo.sh)
#!/bin/bash
for i in 1 2 3 4 5 ; do
ruby hoge.rb $i > hoge-out.txt
done
(hoge.rb)
#!/usr/bin/env ruby
puts ARGV[0]