- 締切済み
教えてください。
(ls a b c no-file > /dev/null) >& some_out では、何が行われてるんでしょうか?教えてください。 また、PCとWSの改行コードの差を確認するにはどうすればいいのでしょうか?
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- ranx
- ベストアンサー率24% (357/1463)
質問の前半については皆さんの答えられている通り。 後半については、確かにエディタで開いてみて分かる場合もありますが、 LINUX上のvi等自動認識してしまうようなものもありますので、 UNIX上でのことのようですから、ダンプしてしまいましょう。 例えば Hello とだけ書かれたファイル(ファイル名file)があったとします。 % od -c file とコマンド入力します。 UNIX形式なら 00000000 H e l l o \n DOS形式なら 00000000 H e l l o \r \n と表示されます。(このサイトの表示は空白がつまってしまいますが) なお、改行コードの違いはテキストファイルの形式の違いによるもので、 日本語コードの違いによるものではありません。 その点で、finalanswerさんの回答は不正確だと思います。
- tailkuppa
- ベストアンサー率53% (52/98)
"> /dev/null" は コマンドが吐き出す標準出力を捨ててしまう時に使用します。 ので、この場合、ls a b c no-file の標準出力はのこりません。 ls コマンドは、引数で指定したファイルが存在しない場合に、 $ ls ファイル名1 ファイル名2 ←存在しないファイル名 ls: ファイル名1: no such file or directory. ls: ファイル名2: no such file or directory. のようにメッセージを標準エラー出力に出しますから、この場合はエラーメッセージ(存在しないファイル名の入ったエラーメッセージのリスト?)をsome_out に取り出しているのだと思います。 これが何をしているのか、ときかれると、答えは分からないのですが...。 改行コードについては、 UNIX 系 LF DOS(Windows)系 CR + LF Macintosh CR の違いがあります。 それぞれに変換してくれるソフトもあります。 Windows なら秀丸エディタにもあるそうです。 確認したいのであれば、それそれのOS の標準のエディタで読み込んでみれば、 見た目で見当はつくと思います。 つかない(自動判定してくれる)のもありますけど。 OS によってそれぞれ方法がちがうので、確実な方法はないかもしれません。 DOS系→UNIX系 改行→^M 次の行^M その次の行^M UNIX系→DOS系(Mac系→UNIX系も同様) 改行→(記号のような文字化け)次の行(文字化け)その次の行 Mac系→UNIX系、またはDOS系 改行→ 次の行→ その次の行 以上、回答になってなくてすいません。
- finalanswer
- ベストアンサー率60% (182/303)
例題として、以下のコマンド % (ls dir_a > std_out) >& std_err は、「ディレクトリdir_aの中身を表示させたときの標準出力をファイルstd_outに出力し、バックグラウンドで標準エラー出力をファイルstd_errに出力する」という意味になります。 また、"/dev/null"は、ごみ箱に相当するものです。したがって、標準出力には何も出力しません。 結論として、質問にあるコマンドは「ディレクトリa、b、c、no-fileの中身をそれぞれリスト表示したときの標準エラー出力を、ファイルsome_outにバックグラウンドで出力する。このとき、標準出力は画面に表示しない。」という意味だと思います。 #要するに、ファイルの中身を表示させたときの標準エラー出力がないかをチェックするためのコマンドでしょう。 また、改行コードの判別法についてですが、WS上にファイルがある場合は、ファイルをviコマンドで開き、行の末尾に ^M が表示されていたら、SJISのファイルです。 改行コードは、SJISではCR+LF、EUCではLFとなります。 #PC上にファイルがあった場合は、バイナリエディタを使用すれば確実に判別できます。
- cherry_moon
- ベストアンサー率36% (37/102)
答えは ls a b c no-file のエラー出力のみを some_out に出力する。 ですね。 おまけ ls の場合のエラーってファイルがないときとパーミッションがないときでしたっけ?? そのコマンドの目的が何かわからないのですが、 他の実装方法があるような気がします。
ls a b c no-file ・・・a,b,c,no-fileディレクトリの中身を表示する > /dev/null ・・・結果を画面表示しない >& some_out ・・・結果をsome_outというファイルに出力 だと思うのですが。 そうすると、some_outにはなにも出力されないような・・・。 実際、実行したら、0バイトのファイルができました。 間違ってたらすみません。
お礼
ありがとうございます。 自分の場合、実行してmuleで中身を見たら ls: a: ファイルもディレクトリもありません。 ls: b: ファイルもディレクトリもありません。 ls: c: ファイルもディレクトリもありません。 ls: no-file: ファイルもディレクトリもありません。 この様に出てきました。う~ん。。。