プロが教える店舗&オフィスのセキュリティ対策術

CygwinでNo such file or directory!?

Cygwin上zshシェルスクリプト実行時に「#!/usr/bin/zsh: No such file or directory」と表示される現象の解決方法を探しています。

kamuycikapです。
Windows7にCygwinをインストール、zshを動作させる設定を行いました。

こんなスクリプトを作成し、実行したところ....

-- ここから

#!/usr/bin/zsh

USB_DIR="/cygdrive/g"
TARGET_DIR="/cygdrive/g/busi"

echo "USBマウントポジション Gドライブを確認します。"
if [ -d $USB_DIR ]
then
echo "USBメモリのBUSIフォルダを確認します。"
if [ -d $TARGET_DIR ]
then
echo "busiフォルダ以下をD:\workに上書きコピーします。"
if cp -far /cygdrive/g/busi /cygdrive/d/work/
then
echo "上書きコピー終了です。"
else
echo "上書きコピーに失敗しました。"
fi
else
echo "USBメモリのBUSIフォルダを確認できませんでした。"
fi
else
echo "USBマウントポジション Gドライブを確認できませんでした。"
fi

--ここまで

こんな結果になってしまいます。

--ここから

/home/Admin/bin/busicpy_usb: line 1: ?#!/usr/bin/zsh: No such file or directory
USBマウントポジション Gドライブを確認します。
USBメモリのBUSIフォルダを確認します。
busiフォルダ以下をD:\workに上書きコピーします。
上書きコピー終了です。

--ここまで

cygwinプロンプト上にて「which zsh」を実行すると

HITACHI-PC% which zsh /home/Admin/program/zsh
/usr/bin/zsh

と返事が返ってきます。
これどういうことでしょうか??
スクリプトは動作している様子ですが、いまいち気持ち悪いです。

識者の方、ご教示願います。

<PS>
Windows7の環境変数「path」には、cygwinをインストールしたフォルダのbinディレクトリパスを追加しております。
私の場合D:\cygwinにインストールしたのでd:\cygwin\binを追加しています。

A 回答 (3件)

ダンプ結果ではっきりしました。

ご協力、ありがとうございます

> 357 273 277
これらは8進数なので、16進数に変換すると
0xef 0xbb 0xbf
になり、UTF-8でのBOMになります。

エディタ等では、BOMを使って文字コードの判定/画面には非表示、と動作しますが、シェルではそのような事はしないで、ファイルの先頭から実行しようとします。(シュルはBOM等ない昔からあるものですから)
そのため、BOMを命令として実行しようとしたたため「No such file or directory」となったものです。
「?」はBOMを文字としてを表示しようとして文字化け(?)した結果です。
普通はみつからなかったら
> /home/Admin/bin/busicpy_usb: line 1: /usr/bin/zsh: No such file or directory
という感じに line X: の後にすぐコマンドがきます。

対処方法として
・BOMを削除する→下記URL等を参考に
・保存時の設定を変更するか、エディタそのものを別の物を使うかして、BOMが付かないようにする
があります。

参考URL:http://ja.wikipedia.org/wiki/UTF-8, http://www.sbirobo.com/2007/12/remove-bom-from-u …
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
ものすごくすっきりしました。

私はxyzzyをエディタとして利用しており、ファイルをUTF-8として保存しておりました。
Linux側から持ってきたファイルがUTF-8(Emacs23で作成)でしたので、Windows側でも同じように保存していたのですが、BOMを付けずに保存するには「UTF-8N」で保存する必要があると理解しました。
シェルの方が歴史が古いので、結果としては当たり前ですね。

大変勉強になりました。
ありがとうございました。

参考にしたサイトは下記のとおりです。
http://www.esrij.com/support/arcexplorer/documen …

お礼日時:2010/02/19 11:47

> /home/Admin/bin/busicpy_usb: line 1: ?#!/usr/bin/zsh: No such file or directory



この、#!の前にある「?」が気になります。
もしかして、BOM付きで保存されている、とかいうことはないでしょうか?

od -c そのスクリプト
としてバイナリダンプをとって、1byte目が # になっているか、それともなにか違う文字になっているか、確認してみてください。

参考URL:http://e-words.jp/w/BOM.html
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ダンプしてみたところこんな感じです。
ファイルは「UTF-8」で、改行は「LF」としております。
最初の357 273 277が怪しいのでしょうか??
いまいち意味が分かってないのですが。。。。なにか気づくことをご教示願います。

HITACHI-PC% od -c ./busicpy_usb.sh /home/Admin/program/zsh
0000000 357 273 277 # ! / u s r / b i n / z s
0000020 h \n \n U S B _ D I R = " / c y g
0000040 d r i v e / g " \n T A R G E T _
0000060 D I R = " / c y g d r i v e / g
0000100 / b u s i " \n \n e c h o " U S
0000120 B 343 203 236 343 202 246 343 203 263 343 203 210 343 203 235
0000140 343 202 270 343 202 267 343 203 247 343 203 263 343 200 200 G
0000160 343 203 211 343 203 251 343 202 244 343 203 226 343 202 222 347
0000200 242 272 350 252 215 343 201 227 343 201 276 343 201 231 343 200

お礼日時:2010/02/18 13:08

zshのインストールからやり直してみたらどうでしょう?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!