- 締切済み
シェルでリダイレクトができない
bashを使っているのですが、 シェルの中で、 ./実行ファイル hoge1 hoge2 > hoge.txt という感じで二つの引数を使って動作する実行ファイルの標準出力を、リダイレクトしたいです。 ですが、テキストに出力をリダイレクトできません。 こんな感じの書き方でリダイレクトできないもんなんでしょうか? 教えて欲しいです。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
リダイレクト、パイプは標準出力パスを使います。標準出力パスを使わずに標準エラー出力パスを使っていませんか? 例:fprintf(stderr, "...", ); write(2, buffer, SIZE); ↓↓↓ 正解 ↓↓↓ fprintf(stdout, "...", ); または printf(); write(1, buffer, SIZE);
- notnot
- ベストアンサー率47% (4900/10358)
書式としては、 ./実行ファイル hoge1 hoge2 > hoge.txt で間違っていませんよ。 どこかに間違いがあるんでしょうけど、具体的な情報が皆無なので、なんとも言い難いです。 スクリプトの先頭で、set -x と書いて、実行前のコマンドラインの出力をさせてそれを見ると何か気づくことがあるかも。
- Tacosan
- ベストアンサー率23% (3656/15482)
とりあえず指摘させてもらうけど, あなたが「シェル」といっているものは「スクリプト」と呼ぶべきものだと思います. なぜかこの 2つを混同する人がいるんだけど, それは「『ワープロで作った文書』を『ワープロ』と呼ぶ」くらいおかしなことです. で, なんだけど, 検証が足りない気がする. まず, 「スクリプトを使わない」で bash から直接 ./実行ファイル hoge1 hoge2 > hoge.txt と実行するとどうなりますか? あと, 「./実行ファイル hoge1 hoge2 として、シェルを使わずに実行させると普通に予定通り動きますし、 標準出力にも出力されています。」 の最後, 「標準出力にも出力されています」というのはどのように確かめたのでしょうか? そして, この「シェルを使わずに実行させる」ときに「標準出力にも出力されてい」るものは, 「./実行ファイル $1 $2 > hoge.txt と書いた」ときにはどうなっていますか? ついでだけど, これも差し支えなければそのスクリプトを全部見せてほしい.
- edomin7777
- ベストアンサー率40% (711/1750)
まさか、実行ファイルが何も出力していないなんてことは無いですよね?
- Tacosan
- ベストアンサー率23% (3656/15482)
差し支えなければ「本当にどのように入力したのか」を書いていただけますか? あと, 「リダイレクトできない」というだけではどのような状況かわからないので, より詳細に書いていただけるとありがたいです. 特に「リダイレクトできていないことをどのようにして確かめたのか」があるといいかな. ディスクがいっぱいとか, ディレクトリに対して書き込みパーミッションがないとか, そういうオチではないですよね.
補足
回答ありがとうございます。 入力としては、 hoge.sh の中で ./実行ファイル $1 $2 > hoge.txt と書いているとして、 bash hoge.sh hoge1 hoge2 と実行している感じです。 確認としては、 ./実行ファイル hoge1 hoge2 として、シェルを使わずに実行させると普通に予定通り動きますし、 標準出力にも出力されています。 ./実行ファイル > hoge.txt として、シェルから動かしても、予定通り動くのですが、 ./実行ファイル $1 $2 > hoge.txt と書くと、テキストファイルに何も書かれていないという状態です。 原因がよく分からず困っている状態です。 どうぞよろしくお願いします。
補足
回答ありがとうございます。 実行ファイルだけ動かすと予定通りに動いています。 引数を二つとり、リダイレクトをするとテキストファイルに書かれていない という状態なので、 ./実行ファイル $1 $2 > hoge.txt という書き方が間違ってるのか???と思ったのですが、 よくわからず質問いたしました。 どうぞよろしくお願いします。