• 締切済み

grep -l '#!/bin/sh' * が動作しない

FedoraCore4 bashで カレントディレクトリの複数の hoge.sh ファイルの中身に #!/bin/sh が書き込まれているファイルを調べる為に grep -l '#!/bin/sh' *.sh と実行すると期待通りに表示されました。 しかし、 grep -l '#!/bin/sh' * と実行したのですが次のプロンプトも表示されず止まってしまいました。 しかし、AIX5.2 bashでは grep -l '#!/bin/sh' * を実行すると正しく表示されました。 以下整理いたしました。 FedoraCore4 × grep -l '#!/bin/sh' * ○ grep -l '#!/bin/sh' *.sh AIX5.2 ○ grep -l '#!/bin/sh' * ○ grep -l '#!/bin/sh' *.sh 何故、動作の違いがあるのか教えて頂けないでしょうか。 よろしくお願い致します。

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

おそらく、大きなサイズのファイルがあるため単に時間がかかっているだけだと思われます。 そういうことをしたいのであれば、ファイルの先頭しか読まないfileコマンドを使って、 file * | grep shell で、おおよそわかります。

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

本当なら, 「同じ計算機で OS だけが違う」状況で比較しないと意味ないんだけどね. とりあえず, FC の方で「どこで止まっているのか」を調べないとねぇ. 例えば ・* の展開で止まっている (ファイルがとてもたくさんあるディレクトリとか, ネットワーク経由ならありうる) ・調べる量が多いので grep が処理している途中 ・実は * を展開した結果ファイルがなくなったので標準入力待ち なんてのは考えられます.

tcpip110
質問者

お礼

回答有難う御座います。 どこで止まっているかについて。 fcで grep -l '#!/bin/sh' * を実行した場合 改行されプロンプトが表示されないで、 入力まちの状態になる事を確認致しました。 また、この時に 『Ctrl + D』を実行すると 実行結果が表示される事も確認を致しました。 補足として、カレントディレクトリには100ファイルあり 全てファイル名後に.shが付くファイルになります。

関連するQ&A

  • #!/bin/bash のラインでエラー発生

    お世話になります。 Linux初心者です。 下記のような***.shを作成し、./***.sh で実行すると、/bin/bash^M bad interperter: No such file or directory というエラーが発生してしまいます。 原因として考えられる事をご教授頂けないでしょうか? --------------------------------------- #!/bin/bash PATH=/usr/local/bin:/bin:/usr/bin for conf in /etc/webalizer*.conf do ~ ---------------------------------------

  • vimのgrepの使い方がよくわかりません

    WindowsXPでvimを使い始めたのですが、 grepのやり方がよくわかりません。 一応、unixでgrepやviは最低限レベルでは使えます。 やりたいこととしては、 指定のテキストから、特定の文字列を検索して、 結果を一覧で表示させて、 その中からどれか選んで、その行へジャンプして表示する ということがやりたいです。 で、たぶんgrepでやれるんじゃないかと思って質問しています。 grepに関する簡単な解説を読むと、 (esc)したあと、 :grep hoge hoge.txt でできる、というようなことが書いてあるのですが、 上記で実行すると、 :!findstr /n hoge hoge.txt > c:xxxxxxxx 2>&1 (1 of 1): 1:hoge と出ますが、ここから何をしていいかわかりません。 grepの機能としてはここで終わりなのでしょうか? ここから結果の行へジャンプしたりできないのでしょうか? また、grep対象のファイルって毎回自分で入力するのでしょうか? たとえば、現在編集しているファイルを対象としたい場合、 現在のファイル名となる変数みたいものはあるのでしょうか?

  • シェルスクリプト コマンドを変数にした時の呼び方

    はじめまして、シェルスクリプトを勉強中の者です。 コマンドを変数にいれて、まとめました。 しかしコマンドの変数を呼びこもうとするとエラーになります。 ============================================ #!/bin/sh GREP="grep" cat "${GREP} '^[0-9]' /home/hoge/test.nicdf" ============================================ ================ シェル実行結果 ============= $ ./test.sh cat: grep '^[0-9]' /home/hoge/test.nicdf: そのようなファイルやディレクトリはありません どう書けば、エラーにならずに正常に動作するでしょうか? ご教授の程よろしくお願いします。

  • 複数存在するgrepについて

    自分はSolaris7(8)を使用しているのですが、grepが /bin/grep /usr/bin/grep /usr/xpg4/bin/grep の3つ存在しています。動作的には前者2つが同じようで、最後者がちょっと拡張されているように思われます。思うに大きな違いは"-f|-e"(ファイルにマッチすべき文字列を書いておくことが出来る)が大きいと思うのですが、そこで、 1) /xpg4 というdirectoryはどのような意味合いを持っているのでしょうか?どのような括りでこのディレクトリがあるのでしょうか? 2) 上に書いたオプションの違いのほかに、両者にはどのような違いが有るのでしょうか? 3) 通常、UNIXのユーザーは/usr/bin/grepがデフォルトで使っているというのが「正しい」と思うのですが、後者(xpg4)がデフォルトとして使われる場合にはどのようなケースがあるのでしょうか? --[参考]-- /usr/bin/grep [ -bchilnsvw ] limited-regular-expression [filename ... ] /usr/xpg4/bin/grep [-E | -F ] [-c | -l | -q ] [ -bhinsvwx ] -e pattern_list ... [ -f pattern_file ... ] [ file ... ] ---------- 宜しくお願いいたします。

  • grepコマンドの使い方

    下記のようなファイルがあるとします。 カレントディレクトリ /home から"hello"という文字列が含まれるテキストを grepしたい場合、コマンドはどのようにすればいいのでしょうか? 色々な方法があると思いますが、よろしくお願いします。 ---------------------------------------------------------------------- /home/hoge1/foo1.txt foo2.exe foo3.txt /home/hoge2/hogehoge2/foo4.txt foo5.exe /home/hoge3/hogehogehoge3/foo6.txt foo7.exe foo8.zip ----------------------------------------------------------------------

  • grepの書き方がわかりません。

    Perlの初心者なんですが、以下のようなテーマをもらってプログラムを作っています。  第一引数にディレクトリのパス、第二引数に検索し たいファイル名を指定して第一引数の  パス以下にある全てのディレクトリを検索してファイルがあればそのパスを表示させなさい。 一応できたのですがプログラムの記述の一部がよくわかりません。以下のプログラムは一部です。 local ($dir, $file) = @_; opendir(DIR,$dir) or die @data = readdir(DIR);#ディレクトリの内容を読む closedir(DIR);#ディレクトリを閉じる local @fname = grep {-f "$dir/$_"} @data; local @dname = grep {-d "$dir/$_"} @data; $dir,$fileには第一、第二引数の文字列をいれているのですがそのディレクトリになかにファイル、ディレクトリがないか検索するためgrepを使っています。それで"$dir/$_"の部分の意味がよくわかりません。 この部分は他のサイトであったものを流用しただけなのですがよくわからないまま使ってたまたま動いたから使用しててこのままでは理解していないままなので どうか教えてほしいです。 あともう一点ありましてgrepのところで最初自分で書いた時  local @fname = grep (-f,@data); というように書きました。ファイルが第一引数にあるときは問題なく動作するのですがその下にあるディレクトリにあるとなぜかプログラムが終わりません。 デバッグとして@dataの中身を表示したらそのディレクトリの検索をしてはいるんですが、その中に目当てのファイルがあるはずなのに@dataの中身がからっぽで ファイルがないことになっています。この違いがどうしてもわかりません。  以上の二点がわからないんですがどうかお手数ですがどなたか教えてください。  

    • ベストアンサー
    • Perl
  • bad interpreterで、シェルが使えません(T_T)

    RedHat9ではよく以下のような胃の痛いような エラーがでます。 rootでシェルが実行できないのですが、 どうすれば実行できるでしょうか? ■1.shというシェルファイル #!/bin/sh /bin/touch 1 ■1.shを実行するとエラーになります。。 # ./1.sh : bad interpreter: そのようなファイルやディレクトリはありません ■cronでも動きません。。 /bin/bash: 1.sh: /bin/sh: bad interpreter: No such file or directory

  • Linuxでシェルスクリプトがフルパスだと実行できない

    Linuxでシェルスクリプトがフルパスだと実行できない こんにちは 現在linuxでシェルスクリプトを記載していて、やっと出来た!と思ったら、なぜかフルパスで実行すると失敗します。 中身は例えば #!bin/sh echo "hello" とし、ファイル名をtest.shとします。 実行時にカレントからだと上手くいきます。 ./test.sh ただし、フルパスで実行するとうまくいきません。 ./home/user/test.sh エラーは以下 bash: ./home/dv3/tet.sh:No such file or directory 所有者はrootでグループもrootにしてあります。 シェルの権限は755にして、rootで実行しています。 なぜカレントだと上手くいき、フルパスだと上手くいかないのでしょうか? パスが必要なコマンドも入っていないのに。。。 どなたかご教授いただけると幸いです。 宜しくお願い致します。

  • Apacheでcgi-binを隠すには

    Apacheの設定でcgiの実行ディレクトリをcgi-binに限定(DocumentRootでのcgi実行は不可)した場合、 アドレスはhttp://hoge.hoge/cgi-bin/となりますが、 これをhttp://hoge.hoge/で実行しているかのように隠蔽(偽装)する方法はないでしょうか?

  • 検索して出た結果ファイル一覧の権限を一括変更

    1.ファイルを検索します。(カレントディレクトリに、BBB.sh とCCC.shを保存しております。) 2.検索されたファイルに対して一括でchmodを行いたいのです。 このBBB.shと、CCC.shの権限を666に コマンドだけで実行できないでしょうか? ・考えてみたコマンド ls -l | grep -e [BC] | chmod 655 →エラーになります。 多分、chmod 655の後ろに、ファイルが来ないためエラーになっていると思うのです。 ご教授お願いします。