• 締切済み

シェルでリダイレクトができない

bashを使っているのですが、 シェルの中で、 ./実行ファイル hoge1 hoge2 > hoge.txt という感じで二つの引数を使って動作する実行ファイルの標準出力を、リダイレクトしたいです。 ですが、テキストに出力をリダイレクトできません。 こんな感じの書き方でリダイレクトできないもんなんでしょうか? 教えて欲しいです。 よろしくお願いします。

みんなの回答

回答No.5

リダイレクト、パイプは標準出力パスを使います。標準出力パスを使わずに標準エラー出力パスを使っていませんか? 例:fprintf(stderr, "...", );   write(2, buffer, SIZE);    ↓↓↓ 正解 ↓↓↓   fprintf(stdout, "...", ); または printf();   write(1, buffer, SIZE);

  • notnot
  • ベストアンサー率47% (4845/10255)
回答No.4

書式としては、 ./実行ファイル hoge1 hoge2 > hoge.txt で間違っていませんよ。 どこかに間違いがあるんでしょうけど、具体的な情報が皆無なので、なんとも言い難いです。 スクリプトの先頭で、set -x と書いて、実行前のコマンドラインの出力をさせてそれを見ると何か気づくことがあるかも。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

とりあえず指摘させてもらうけど, あなたが「シェル」といっているものは「スクリプト」と呼ぶべきものだと思います. なぜかこの 2つを混同する人がいるんだけど, それは「『ワープロで作った文書』を『ワープロ』と呼ぶ」くらいおかしなことです. で, なんだけど, 検証が足りない気がする. まず, 「スクリプトを使わない」で bash から直接 ./実行ファイル hoge1 hoge2 > hoge.txt と実行するとどうなりますか? あと, 「./実行ファイル hoge1 hoge2 として、シェルを使わずに実行させると普通に予定通り動きますし、 標準出力にも出力されています。」 の最後, 「標準出力にも出力されています」というのはどのように確かめたのでしょうか? そして, この「シェルを使わずに実行させる」ときに「標準出力にも出力されてい」るものは, 「./実行ファイル $1 $2 > hoge.txt と書いた」ときにはどうなっていますか? ついでだけど, これも差し支えなければそのスクリプトを全部見せてほしい.

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.2

まさか、実行ファイルが何も出力していないなんてことは無いですよね?

take0307
質問者

補足

回答ありがとうございます。 実行ファイルだけ動かすと予定通りに動いています。 引数を二つとり、リダイレクトをするとテキストファイルに書かれていない という状態なので、 ./実行ファイル $1 $2 > hoge.txt という書き方が間違ってるのか???と思ったのですが、 よくわからず質問いたしました。 どうぞよろしくお願いします。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

差し支えなければ「本当にどのように入力したのか」を書いていただけますか? あと, 「リダイレクトできない」というだけではどのような状況かわからないので, より詳細に書いていただけるとありがたいです. 特に「リダイレクトできていないことをどのようにして確かめたのか」があるといいかな. ディスクがいっぱいとか, ディレクトリに対して書き込みパーミッションがないとか, そういうオチではないですよね.

take0307
質問者

補足

回答ありがとうございます。 入力としては、 hoge.sh の中で ./実行ファイル $1 $2 > hoge.txt と書いているとして、 bash hoge.sh hoge1 hoge2 と実行している感じです。 確認としては、 ./実行ファイル hoge1 hoge2 として、シェルを使わずに実行させると普通に予定通り動きますし、 標準出力にも出力されています。 ./実行ファイル > hoge.txt として、シェルから動かしても、予定通り動くのですが、 ./実行ファイル $1 $2 > hoge.txt と書くと、テキストファイルに何も書かれていないという状態です。 原因がよく分からず困っている状態です。 どうぞよろしくお願いします。

関連するQ&A

  • シェルのリダイレクトとパイプについて

    シェルのリダイレクトとパイプについての質問です. リダイレクトでコマンドの標準出力をファイルに指定した後に, パイプを置いて,もう一つコマンドを並べたとき, 後の方のコマンドの標準入力はどうなるのでしょうか? 例えば, ls >outfile |cat ならば, catの標準入力には,何も入ってこないと思うのですが, これを実行すると,lsの結果がoutfileに書き込まれ, 次のプロンプトが表示されます. 普通,catを引数なしで実行すると, EOFが入力されるまで,入力待ちになると思うのですが, こうならないのは,シェルがcatの標準入力にEOFを入力したからだと 考えていいのでしょうか. よろしくお願いします. (質問の意味が分かりにくければご指摘下さい.)

  • Kシェルのリダイレクト

    Kシェルのリダイレクト シェル初心者で申し訳ございませんが、ご教授いただけたら幸いです。 やりたいこと  xxx.kshの実行ログを出力したい。 出力したいログは、以下コマンド実行時に標準出力されるログをファイルへ落としたい。 尚、実際の実行コマンドは、ksh -xは入力しません。 $ ksh -x ./xxx.ksh 上記コマンドを実行すると、詳細なログが表示されるのですが、ファイルへ落としたいと思います。 分かりづらいかも知れませんが、宜しくお願い致します。

  • awkの入力ファイルをリダイレクト先にする方法

    ---------hoge.txt--------- hoge hoge hoge ------------------------- 等としておいて、 $ awk '{print NR":"$1;}' hoge.txt とすると標準出力に ------------------------- 1:hoge 2:hoge 3:hoge ------------------------- と表示されますが、これを $ awk '{print NR":"$1;}' hoge.txt > hoge.txt と自分自身にリダイレクトするとhoge.txtは空になってしまいます。 hoge.txtに上の標準出力を上書きするにはどのように書けば良いのでしょうか、教えてください。 awkだけでなく、テキストファイルを入力にできるコマンド一般についても 上記のようなことができる方法があれば、教えていただきたいです。

  • Windowsから直接起動するアプリにリダイレクトを設定するには?

    Windowsから直接起動するアプリにリダイレクトを設定するには? 「ファイル名を指定して実行」から直接アプリを起動し、それにリダイレクトを設定したいのですが、指定したファイルに出力されずに困っています。 例.「ファイル名を指定して実行」→「ipconfig > c:\hoge.txt」を入力= コンソールに出力 コマンドプロンプト上から「ipconfig > c:\hoge.txt」を実行するとhoge.txtに出力されるので、もしかしたらリダイレクト機能はWindowsではなく、コマンドプロンプトが持ってる?と疑っています。 だとしたら、Windowsから直接アプリを起動する場合、リダイレクトは設定できないことになりますが、この認識であっているでしょうか? 環境:Windows XP

  • シェルから引数を使用してsedコマンドを使用する方法

    テキストファイル内のAという文字を置き換えようと思っています。 シェルから引数渡しでsedコマンドを使用してやろうと思っているのですが、引数渡しの方法をご存知の方がいらっしゃいましたらご教授ください。 具体的には下記のようなことをしようとしております。 sample.txt --- ABC AABBC sample.txt内のAという文字を他の文字に置き換えようと思っています。 hoge.sh 1 として、Aを1に置き換えようと思っています。 hoge.shは、 #! /bin/csh sed -e 's/A/${1}/g' sample.txt >! sample2.txt として実行したところ、引数がうまく拾えず1に置換することができずに困っています。 よろしくお願いします。

  • シェルで一行一行読み込む

    いつもお世話になっております。 標題の通り、シェルで一行一行読み込で出力する方法をご教授願えないでしょうか [sh] #!/bin/bash cat test.txt | while read line do echo $line done [test.txt] /usr/hoge/hoge1/hoge2/hoge3/hoge4/index.html /usr/hoge1/hoge1/hoge2/hoge3/hoge4/index.html /usr/hoge3/hoge1/hoge2/hoge3/hoge4/index.html 通常echo $lineにしていれば、text.txtの内容が出力されるのですが、 加えて、ls -l コマンドも実行したいのですが、うまくいきません [したいこと] /usr/hoge/hoge1/hoge2/hoge3/hoge4/index.html -rw-rw-r-- 1 hoge hoge 7536 3月 16 16:15 /usr/hoge/hoge1/hoge2/hoge3/hoge4/index.html /usr/hoge/hoge1/hoge2/hoge3/hoge4/index.html -rw-rw-r-- 1 hoge hoge 7536 3月 16 16:15 /usr/hoge1/hoge1/hoge2/hoge3/hoge4/index.html よろしくおねがいします

  • kシェルのリダイレクトについて

    kシェルを用いてツールを作っています。 このツールを使用する際には、全ての出力をファイルに出力して 処理の最後に出力ファイルをcatで表示したいと考えております。 出力は、exec 2>&1 ~.logでファイル出力しますが、 そのファイルをcatすると、catの結果もファイル出力になってしまいます。 catを標準出力するにはどうしたら宜しいでしょうか?

  • bashのリダイレクト >&- について

    みなさん、こんにちは。 Linuxのsh、bashのリダイレクトに関する質問です。 とあるサイトにて、下記のシェルスクリプトは何を表しているか? という問題がありまして # 【問題】ここから #!/bin/sh exec 3>&1 status=$({ { command1 3>&- 4>&-; echo $? 1>&4 3>&- 4>&-;} | command2 1>&3 3>&- 4>&-;} 4>&1) if [ $status != 0 ]; then ... fi # 【問題】ここまで 問題の答え自体もよく分かっていないのですが、 その前に、「>&-」の部分が何を意図しているのかが理解できておりません。 「2>&1」で、標準エラー出力の出力先を、標準出力の出力先に切り替える。 という認識なのですが、「>&-」はどのような意味なのでしょうか。 どなたかご教示いただけないでしょうか。

  • 同じ名前のファイルにリダイレクト

    あるファイルを処理し、そのファイルにそのままリダイレクトして書き出そうとした場合の処理に関してです。 例) sed 's/aaa/bbb/' hoge.txt > hoge.txt このようにするとhoge.txtの中身が消えてしまいます。 別名のファイルに書き出してmvすればよいのですが、なぜできないのか納得ができず悩んでいます。 お分かりの方いらっしゃればお教えください。

  • リダイレクトする時の文字コードをUnicodeに

    現在、VisualStudioで、システムコールの標準出力結果をリダイレクトしてファイルに保存する プログラムを書いています。 _tsystem(command); のような感じで、commandには "hogehoge > hoge.txt"のように入ります。 ※command はTCHAR この出力結果が、Shift-Jisになっているようで、Shift-Jisだと日本語が文字化けせずに表示されるのですが、Unicode UTF-16にすると文字化けしてしまいます。 Unicode UTF-16とかUnicode UTF-8など文字コードを指定してリダイレクトできないのでしょうか。 ちょっと調べてみましたがうまく見つかりませんでした。

専門家に質問してみよう