• 締切済み

教えてください。

(ls a b c no-file > /dev/null) >& some_out では、何が行われてるんでしょうか?教えてください。 また、PCとWSの改行コードの差を確認するにはどうすればいいのでしょうか?

  • janne
  • お礼率16% (11/68)

みんなの回答

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.5

質問の前半については皆さんの答えられている通り。 後半については、確かにエディタで開いてみて分かる場合もありますが、 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)
回答No.4

"> /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系 改行→    次の行→        その次の行 以上、回答になってなくてすいません。

回答No.3

例題として、以下のコマンド % (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上にファイルがあった場合は、バイナリエディタを使用すれば確実に判別できます。

参考URL:
http://x68000.startshop.co.jp/~68user/unix/
回答No.2

答えは ls a b c no-file のエラー出力のみを some_out に出力する。 ですね。 おまけ ls の場合のエラーってファイルがないときとパーミッションがないときでしたっけ?? そのコマンドの目的が何かわからないのですが、 他の実装方法があるような気がします。

noname#1080
noname#1080
回答No.1

ls a b c no-file ・・・a,b,c,no-fileディレクトリの中身を表示する > /dev/null   ・・・結果を画面表示しない >& some_out   ・・・結果をsome_outというファイルに出力 だと思うのですが。 そうすると、some_outにはなにも出力されないような・・・。 実際、実行したら、0バイトのファイルができました。 間違ってたらすみません。

janne
質問者

お礼

ありがとうございます。 自分の場合、実行してmuleで中身を見たら ls: a: ファイルもディレクトリもありません。 ls: b: ファイルもディレクトリもありません。 ls: c: ファイルもディレクトリもありません。 ls: no-file: ファイルもディレクトリもありません。 この様に出てきました。う~ん。。。

関連するQ&A

  • /dev/nullを削除できない

    OS:Redhat Linux ES 5.0 /dev/nullファイルのパーミッションがcrw-rw-rw- からsrwxr-xr-xに 変わってしまい、mknodで作り直そうと思いましたが、どうしても /dev/nullファイルを削除できませんので作り直せない状態です。 # rm -rf /dev/null <-エラーメッセージはない #ls -l /dev/null -rw-r--r-- 1 root root 0 7月 17 11:36 /dev/null <-パーミッションが変わっている #mknod -m 666 /dev/null c 1 3 mknod: `/dev/null': ファイルが存在します # どのようにすれば/dev/nullを作り直せるのでしょうか?

  • popen使用時のエラー出力を出さないようにしたい (Solaris C言語)

    AAA/a というファイルがなかった場合 (1)poepn("ls AAA/a", "r" ); (2)poepn("ls AAA*/a", "r" ); を実行した時のそれぞれの出力メッセージは (1)AAA/a: ファイルもディレクトリもありません。 (2)/bin/ls: No match. となります。そこで、2> /dev/null を付け足して実行すると、(1)のエラーメッセージは消えるんですが、(2)の場合のエラーメッセージは出てしまいます。 (1)の場合も(2)の場合もエラーメッセージを出さないようにする方法ってありますか?

  • テーブルの結合?SQL文を教えてください。

    どうしても自分で解決できなかったので、教えてください。 2つのテーブル(AとB)から結果(☆)を取り出したいです。 テーブルレイアウトと値は下記の通りです。 テーブルA(A_NO DAT_NOが主キー) A_NO DAT_NO B_NO C_NO D_NO 0001 1 100 1000 Null 0001 2 Null Null A001 0001 3 200 2000 Null 0001 4 200 2000 A002 0001 5 300 3000 A003 テーブルB(B_NO C_NOが主キー) B_NO C_NO D_NO LEN DIV 100 1000 A001 10 01 100 1000 A002 10 01 100 1000 A003 Null Null 100 1000 Null Null Null 200 2000 A002 Null Null 200 2000 Null Null Null 300 1000 A001 30 03 300 3000 Null Null Null 下記のような結果が欲しいです。 結果(☆) A_NO DAT_NO B_NO C_NO D_NO LEN DIV 0001 1 100 1000 Null 10 01 0001 2 Null Null A001 Null Null 0001 3 200 2000 Null Null Null 0001 4 200 2000 A002 Null Null 0001 5 300 3000 A003 30 03 元々はテーブルAとテーブルBを、テーブルAのB_NOとC_NOとテーブルBのB_NOとC_NOを条件に結合(LEFTJOIN)していました。 しかしテーブルAのB_NOとC_NOがNULLの場合でも、データ抽出する為に上記の方法では駄目でした。 どのようにすれば思い通りの結果を取得できますか? とても困っていますので、よろしくお願いいたします。

  • Oracle[10g]のSQL文について(改めて)

    すみません。[B]テーブルの作成がおかしい様でしたので、 改めて質問させて下さい。 Oracle[10g]のSQL文についての質問です。(No.???) [A]テーブルに [CODE](KEY) [CODE2] [NAME] のフィールドがあります。 A-1 B-1 NAME-1 A-2 B-2 NAME-2 A-3 B-3 NAME-3 [B]テーブルに [CODE3](KEY) [NAMEB] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] のフィールドがあります。 X 1 A-1 X 2 A-3 Y 1 A-2 結果が [NO/LINE/CODE/NAMEB] X 1 A-1 NAME-B-1 X 2 A-3 (NULL) と、なる様にしたいのです。 SELECT C1.NO, C1.LINE,C1.CODE, Tx.NAMEB FROM C1 , ( SELECT C1.CODE, TNMx1.NAMEB FROM C1, ( SELECT CODE, CODE2, CODE3, NAMEB FROM A, B WHERE A.CODE2 = B.CODE3 ) TNMx1 WHERE C1.NO = 'X' AND C1.CODE = TNMx1.CODE(+) ) Tx WHERE C1.NO = 'X' GROUP BY C1.NO, C1.LINE,C1.CODE, Tx.NAMEB と、考えたのですが、何故か結果が X 1 A-1 (NULL) X 1 A-1 NAME-B-1 X 2 A-3 (NULL) X 2 A-3 NAME-B-1 4行もでてしまいます。 問題は、[B]テーブルです。 宜しくお願い致します。

  • Oracle[10g]のSQL文について。(新No.3)

    なんども、恐縮です。 Oracle[10g]のSQL文についての質問です。(新No.3) 実は、JOINが多くてどこに[ROW_NUMBER]を入れれば良いのか解りません。 [A]テーブルに [CODE](KEY) [CODE2] のフィールドがあります。 A-1 B-1 A-2 B-2 A-3 B-3 [A2]テーブルに [CODEB](KEY) [CODE2] のフィールドがあります。 AA-1 B-1 AA-2 B-2 AA-3 B-3 [B]テーブルに [CODE3](KEY) [NAME-B] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] [CODEB]のフィールドがあります。 X 1 A-1 AA-2 X 2 A-3 AA-1 Y 1 A-2 AA-3 [C2]テーブルに [NO](KEY) [LINE](KEY) [LINE2](KEY) [BIKO] のフィールドがあります。 X 1 1 BIKO-1 X 1 2 BIKO-2 結果が [NO/LINE/CODE/CODEB/NM1/NM2/BIKO] X 1 A-1 AA-2 NAME-B-1 NAME-B-2 BIKO-1 X 2 A-3 AA-1 (null) NAME-B-1 (null) と、なる様にしたいのです。 要するに、のBIKOは、[C2.LINE2]の一番最小の物を取得したいのです。 SELECT C1.NO, C1.LINE, C1.CODE, C1.CODEB, B.NAMEB AS NM1, B_1.NAMEB AS NM2, C2.LINE2, C2.BIKO FROM ((((C1 LEFT JOIN A ON C1.CODE = A.CODE) LEFT JOIN B ON A.CODE2 = B.CODE3) LEFT JOIN A2 ON C1.CODEB = A2.CODEB) LEFT JOIN B B_1 ON A2.CODE2 = B_1.CODE3) LEFT JOIN C2 ON (C1.LINE = C2.LINE) AND (C1.NO = C2.NO) WHERE (((C1.NO)='X')) ORDER BY C1.NO, C1.LINE, C2.LINE2; と、考えたのですが、結果が X 1 A-1 AA-2 NAME-B-1 NAME-B-2 1 BIKO-1 X 1 A-1 AA-2 NAME-B-1 NAME-B-2 2 BIKO-2 X 2 A-3 AA-1 (null) NAME-B-1(null)(null) と、出てしまいます。 どうすれば良いのでしょうか ? 宜しくお願い致します。

  • シェルスクリプト複数まとめて

    ls ../ | grep "hoge" | ...... とどんどんパイプを通して処理する時にすべて出力を抑制したい時、まとめて > /dev/null 2>&1 出来ませんか? 言ったんファイルに書いてそれを実行する際に > /dev/null 2>&1 する方法しかおもいつきませぬ。

  • 3つのテーブルから、データが重複しないように抽出したい

    お世話になっております。 今回、以下のような3つのテーブルから情報を引き出したいのですが、 うまくいかず困っております。 【TABLE_A】  a_no | animal_name | ------+------------+  0001 |   uma   |  0002 |   usagi   |  0003 |   kirin   | 【TABLE_B】  b_no | fish_name | ------+----------+  000A | ayu     |  000B | suzuki    |  000C | kurodai   | 【TABLE_C】  NO | a_no1 | a_no2 | b_no1 | b_no2 | ----+-------+-------+-------+-------+  1 |  0001 | 0003  | null  | 000A  |  2 |  0002 | null   | 000C | 000B  |  3 |  0001 | 0002  | null  | null   | TABLE_Cをベースに、A、Bのテーブルから該当データのname値を取ってきたいのですがうまくいきません。 私が求める結果は以下のような感じです。(条件:WHERE NO = 1)  NO | a_no | animal_name | b_no | fish_name | -----+------+------------+------+----------+  1  | 0001 |   uma    | null   |  null   |  1  | 0003 |   kirin    | 000A  |  ayu   | 下記のように、INNER JOIN句を使ったりして四苦八苦してみたのですが、いまいち上手く抽出できません。 SELECT c.NO, a.a_no, a.animal_name, b.b_no, b.fish_name FROM (TABLE_C c INNER JOIN TABLE_A a ON c.a_no1 = a.a_no OR c.a_no2 = a.a_no ) INNER JOIN TABLE_B b ON c.b_no1 = b.b_no OR c.b_no2 = b.b_no WHERE c.NO = 1; 上記だと、  NO | a_no | animal_name | b_no | fish_name | ----+-------+------------+------+----------+  1  | 0001 |   uma   | null   |  null  |  1  | 0003 |   kirin   | 000A  |  ayu  |  1  | 0003 |   kirin   | 000A  |  ayu  | のように、余計に重複して結果が返されてきてしまいます。(3行目は2行目と同じ結果なのでいらないのです・・・) 何か良い構文はありませんでしょうか?;; 宜しくお願い致します! (環境は、MySQL 4.1.1です。)

    • ベストアンサー
    • MySQL
  • Linuxで実行ファイルを実行

    Linux上でC言語をコンパイルし、作成された実行形式ファイルを実行しようとしたのですが、実行できません。 作業フォルダは /var/www/html です。 gcc program.c でコンパイル、 作成されたa.out(ls でフォルダ内にあるのは確認済です) を以下の方法で実行しようとしましたが、全てできませんでした。 1. [root@host-210-161-57-177 html]# a.out bash: a.out: command not found 2. [root@host-210-161-57-177 html]# ./a.out opendir: No such file or directory 3. [root@host-210-161-57-177 html]# %./a.out bash: fg: %./a.out: no such job 4. [root@host-210-161-57-177 html]# % ./a.out bash: fg: %: no such job gcc -o program program.c でファイル名を指定してコンパイルしてみても同様の結果でした。 ご存じの方、どうかご回答をよろしくおねがいします。

  • すべてのファイルにデータを取得方法

    VBAで一覧作成を作っているですけど、ちょっと力不足のせいで、わからないところがあって、ぜひご教示ください。 フォルダにあるすべてのファイルを読み込んで、中の値を取得したいです。いろいろ方法を試して見たのですが、うまく行かないです。 こんな感じです。(一覧作成見たいもの) xlsファイル1   A  B   C     D 1 氏名 NO オーダー名  時間 に 指定されたフォルダ中のすべてファイル A   B     C (一つのファイル) 1 氏名   山田  2 No オーダー名  時間 3 01    A 1 4 02  B 1 5 03  B  1 氏名   佐藤  (二つのファイル) No オーダー名  時間 03  C 1 04  D 1 05    E 1 ・ ・ ・ の最後のファイルまでを 読み込んだら xlsファイル1を  A  B   C     D 氏名 NO オーダー名  時間 山田 01 A 1 山田 02 B 2 佐藤 03 C 1 佐藤 04 D 1 佐藤 05   E      1 ・ ・ ・ こんな感じ Dim BookName As String Dim PathName As String Dim WS1 As Worksheet Dim WS2 As Worksheet Dim no2_count As Long ’xlsファイル1 Set WS1 = Worksheets("個人一覧作成") no2_count = WS1.Cells(Rows.count, 1).End(xlUp).Row Dim i As Integer For i = 2 To no2_count Step 1 PathName = "C:\test\" BookName = Dir(PathName & "*.xls", vbNormal) Do Until BookName = "" Workbooks.Open PathName & BookName Set WS2 = Worksheets(2)   ’氏名の値を取得 WS1.Range("A" & i).Value = WS2.Cells("B,C", 2).Value Workbooks(BookName).Close    BookName = Dir() Loop Next i 初心者なので今の段階では氏名の値すら取得できないですけど、 簡単でも結構ですので、どなたは方法をご教示ください。

  • 静的メンバ、ネストクラス、enumのアクセス

    下記のコードを試した所、(1)(4)は無事動作しますが、 (2)と(3)はコンパイルエラーになってしまいます。 初め、静的メンバの場合はnullでも動作する事にすごい驚いたんですが、 どこまでなら問題なく動作するかのラインがわからなくてこまっています。もしよろしければアドバイスをよろしくお願いします。 class Test{ static String A="A"; static class B{ static String val = "B"; } enum C{A,B,C} } enum D{A,B,C} class Sta{ public static void main(String[] args){ Test y=null; D y2 = null; (1)System.out.println(y.A); (2)System.out.println(y.B.val); (3)System.out.println(y.C.A); (4)System.out.println(y2.C); }}