2011-10-26 1 views
3

I持って働く次のスクリプト:シェルスクリプトは、コマンドが見つかりません

x=10 
echo $x 
now=$(date +'%Y-%m-%d') 
echo $now 

をしかし、私が先頭にコメント行を追加する場合:私は取得

# comment 
x=10 
echo $x 
now=$(date +'%Y-%m-%d') 
echo $now 

次のようになります。

x=10: command not found 
x: undefined variable 

なぜスクリプトが失敗するコメントが追加されますか?

私はそれが動作する次の手順を実行した場合:

x=10 
echo $x 
now=$(date +'%Y-%m-%d') 
# comment here 
echo $now 
+1

このスクリプトは、最初の行に '#!'シバンを持っているのですか、それとも裸のコマンドですか? –

+0

いいえ、そうではありません。 –

+0

ファイルにDOSスタイルの行末が表示されていませんか? – derobert

答えて

6

これは、CSHの癖です。 (cshの使用を中止してください!)cshは "標準シェル"(cshのマンページから引用)を使用して '#'で始まらないスクリプトを処理します。 '#'で始まるスクリプトはcshで解析されます。あなたのスクリプトは有効なcshではありません。

このタイプの問題を回避するには、おそらくシバンラインを追加する必要があります。これが私のシステム上で動作します。この

#!/bin/sh 
# 
x=10 
echo $x 
now=$(date +'%Y-%m-%d') 
echo $now 

よう

 
#!/bin/sh 
+0

cshとはどのように使用をやめますか? –

+0

@ JohnB: 'chsh'を実行してシェルを変更することができます。 cshとは何ですか? cshは悪です。 'man csh'はあまり偏っていない記述を与えるかもしれません。 – derobert

+0

素晴らしい!ありがとう! '#!/ bin/sh'を追加しました。 –

2

トライ何か(Ubuntuの11.04、64ビット):それは、最初の行を作成しています。それがうまくいかなければ、あなたのファイルにいくつかの隠された特殊文字があるかもしれません。

+0

私は '#!/ bin/sh'を持っていませんでした –

関連する問題