• 締切済み

「照合パターンに合いません」の回避法

ディレクトリ/test内のファイルをリストアップして 配列に格納するためにcshスクリプトにて set LIST=( /test/* ) とすると、ディレクトリが空の場合 setコマンドが「照合パターンに合いません」 というエラーを吐きます。このエラーが起きると シェルスクリプト内で返値を拾ってエラー対処することも できず、スクリプトが落ちます。これを何とか回避する 方法はないでしょうか? 前もってlsやfindでディレクトリの中身が空でないことを 調べるというのは却下です。

みんなの回答

  • ishi7474
  • ベストアンサー率32% (71/216)
回答No.2

却下という言葉をお使いなので、質問者様がどれだけ偉い方かは分かりませんが、お使いのシェル(csh系と思われます)で"set nonomatch"というオプションが指定できるのであれば、「照合パターンに合いません」というエラーは出なくなります。 但し、ディレクトリが空の場合はシェル変数LISTに"/test/*"が入ることになりますので、何らかの処理で除く必要はあります。

  • mtfoggy
  • ベストアンサー率14% (37/255)
回答No.1

質問内容が不十分なのですが、 結局、ディレクトリが空の場合、どんな値をLIST変数に入れたいのでしょう?

since1983
質問者

補足

ディレクトリが空の時は空の配列になって欲しいのですが。。。

関連するQ&A

  • シェル変数とパイプ

    シェルの変数にパイプを入れた文字列(コマンド)を格納し、それを実行したいのですが、「|」がただの文字として扱われているようでうまく実行できません。 どのように記述すれば、パイプとして認識してくれるのでしょうか? 次のようなことをやりたいのですが、このようにエラーになってしまいます。 # setenv cmd "ls | grep test" # $cmd ls: |: そのようなファイルやディレクトリはありません ls: grep: そのようなファイルやディレクトリはありません ls: test: そのようなファイルやディレクトリはありません

  • シェルスクリプトで配列が使えない

    シェルスクリプトを利用するときに変数を配列として扱えるという記述を見たので、 以下のようなシェルスクリプトを作成したのですが、エラーが出てきてしまいます。 端末で直接入力すると、正しく動作します。そのためなぜエラーとなるのかわかりません。 環境はubuntu 10.10、 GNU bash, バージョン 4.1.5(1)-release (i686-pc-linux-gnu) です。 ---------------------- #!/bin/sh list=(`ls`) echo ${list[0]} ---------------------- 3:Syntax error: "(" unexpected

  • Bashシェルスクリプト findのエイリアスに引数を渡すにはどうすれ

    Bashシェルスクリプト findのエイリアスに引数を渡すにはどうすれば良いのでしょうか? $ alias a="ls $1 -a" $ a dir . .. ls_nara_ok $ alias a="find $1 -type d" $ a dir find: pathes must precede expression: a lsではうまく行くのに、findではエラーとなってしまいます。 どうすればスクリプト(エイリアス)内のfindに引数を渡せるのでしょうか?

  • Cシェルについて

    Cシェルについて #! /bin/csh ##! /bin/csh -vx setenv NOHUP '/usr/bin/nohup' set AAA_CSH = $NOHUP' XXX.sh file.txt &' ($AAA_CSH >> /dev/null) >>& err.log シェルスクリプトを作成して上記のとおりnohupでXXX.shを実行するように記述します。 エラーがあった場合、err.logに出力するように作成したつもりなのですが、 XXX.shがなかったとき、 「/usr/bin/nohup: XXX.sh:そのようなファイルまたはディレクトリはありません。」 と標準出力されてしまいます。 このエラーメッセージをerr.logに記述するようにしたいのですが、 どうしたらよいでしょうか? よろしくお願いいたします。

  • cshの標準出力を制御したい

    実は以下にも同じ質問があったのですが、回答がついてなかったので改めて質問させて頂きます。 cshで以下の様な形で"ls"の結果をシェル変数に取りたいのですが: set list = `ls *.s | sed -n 's/\.s//p'` lsの結果がマッチしなかったときに出力されるメッセージ: ls: 照合パターンに合いません. がコンソールに出力されると誤解を招くのでそれをやめさせたいのですが、何か良い方法はないでしょうか? 色々試しましたが簡単な方法は無い様な気がしています。 [コマンド] set list = `ls *.s | sed -n 's/\.s//p'` [例] (1) OKケース %>ls *.s aaa.s bbb.s 結果==> aaa bbb (2) NGケース %> ls *s ls: 照合パターンに合いません. [とりあえずやりたい事を実現する方法] ls *.s >& /dev/null if($status == 0) then # ls is matched set list = `ls *.s | sed -n 's/\.s//p'` endif ※ 冗長でかつ処理速度が遅いという問題があろうかと思います。 [以前の質問] http://www.okweb.ne.jp/kotaeru.php3?q=825419 以上宜しくお願いいたします。

  • シェルでファイルを読み込む

    csh を使っています。 ファイル hoge には1行に一つずつファイルの / からのパスが記されています。 hoge から 1行ずつファイルパスのリスト読み込んでそのファイルについて ls -al を行なった結果をファイル foo に保存したいのですが、どのようなシェルプログラムを作れば宜しいでしょうか? awk/sed も使える環境ですので、これらを使ったスクリプトでも構いません。 非常に初歩的な質問で申し訳ありませんが、宜しくお願いします。

  • cshのファイル位置

    cronからcshスクリプトを呼び出して処理をさせようとしていますが、汎用的にしたい(別のディレクトリでも再利用したい)ため、スクリプトの存在するディレクトリを取得したいと思いました。マニュアルを見ても無いようなので質問します。phpでいうdirname(__FILE__)のような、スクリプト位置を返すシェル変数または手段は無いでしょうか?bash等でも構いません。よろしくお願いします。

  • CSHの環境変数の設定

    CSHで外部で定義したconfigファイルから変数を読み込み そのシェル及び子シェル内で有効な変数として使用したのですが どのような方法がありますでしょうか? 以下の方法だと親シェルからでは子シェルで設定した変数が読み込めないため困っています。 config.csh #!/bin/csh -f setenv AAA aaa test.csh #!/bin/csh -f set APP_ROOT = `dirname $0` cd $APP_ROOT set CONFIG_FILE=$APP_ROOT"/config.csh" echo $AAA

  • シェルの中からcdした結果を終了後も保持するには

    SunOS 5.6を使っています。 cshにて、いくつかのディレクトリのリストを表示し、 選択したディレクトリに移動させる(スクリプト終了後に移動が終わっている)ような スクリプトを用意したいのですが、どのようにすれば実現できますか? 単純に、cshスクリプトの中で、cd させると、その場では移動しますが、スクリプトの実行が終わると最初にスクリプト実行前にいたディレクトリに戻ってしまいます。 →これをスクリプト実行から抜けても移動した状態としたい。 ちなみにbashであれば、functionで書いてやれば上手くできていました。 単純な質問で恐縮ですが、よろしくお願いします。

  • シェルの実行ができません

    TeraTerm上で [ora10gas@doao shell]$ ./get_daisya.csh 上のようにシェルを実行してみたのですが、 /bin/ls: 照合パターンに合いません. と表示されます。 これしか情報が出せませんが、こういうときはどこを確認したら解決できるか ご教授していただけませんか。 以上、よろしくお願いします