2012-01-27 12 views
2
for files in $(find . -maxdepth 1 -type f); do 
    echo $(basename $files) 
done 

作品のコピーは/コンソールに挿入されますが、シェルスクリプトとして実行したとき、それはコンソールで動作しますが、シェルスクリプトとして実行しませ

'/TEST.sh: line 1: syntax error near unexpected token `do 
'/TEST.sh: line 1: `for files in $(find . -maxdepth 1 -type f); do 

EDIT返します

試み2#とは!/ binに/ shが今

存在しない

-bash: /oper/text2pdf_TEST.sh: /bin/sh^M: bad interpreter: No such file or directory 

ただし/ binに/ shの結果、最初の行に追加しました

#!/ binに/ bashを持つ試み3は、最初の行に追加今

-bash: /oper/text2pdf_TEST.sh: /bin/bash^M: bad interpreter: No such file or directory 

ただし/ binに/ bashが

+2

(回答後):この質問が正しく答える可能性がある唯一の方法である正確な逐語エラーを含めると+1。 –

答えて

5

あなたの誤差が大きなヒントです:それは

...near unexpected token `do' 

を言いたいが、決算ダニが行の先頭にあることに注意してください。これは、印刷しているトークンがdo^Mdoに続いてキャリッジリターン)であるためです。

おそらく、DOS/Windowsスタイルのエディタでファイルを編集したことがあります。 UNIXスタイルの行末が必要です。

+0

...あなたはおそらく正しいでしょう。私は私のローカルマシン(windows xp)上のeditplusでそれを編集し、それをlinux boxに移動しました... – Mechaflash

0
#!/bin/sh 
for files in $(find . -maxdepth 1 -type f); do 
    echo $(basename $files) 
done 

存在しないこの1つは私のために正常に動作結果。多分あなたはShebang(通訳者を指定する最初の行)を忘れていたでしょうか?

+0

は私のスクリプトを一行目に#!/ bin/shで更新し、別のエラー – Mechaflash

1

シバンなしでは、スクリプトは/bin/shで実行されます。システムによっては、sh$(...)構文をサポートしていない可能性があります。

スクリプトの最初の行として

#!/bin/bash 

を追加します。

+0

をスクリプトの最初の行に#!/ bin/bashで更新し、別のエラー – Mechaflash

+0

を出力しました。他人を助けるかもしれないので、ここでこの答えを残してください。 –

2

まあ、エラーメッセージが間違って何と言う:

/bin/sh^M: bad interpreter: No such file or directory 

あなたのエディタが/bin/sh後に余分な文字^ M(コード13)を置きます。行を正しい方法で終了するようにエディタを設定します。

CR + LFの行を終了するオペレーティングシステム上のファイルを編集し、LFのみを使用するオペレーティングシステムにコピーすることもできます。この改行の混乱に関する背景については、this wikipedia articleを参照してください。

+0

これは、Windows上で動作するUnixライクなエミュレーション層であるCygwinでよく見られます。 'dos2unix'コマンドは、Windows形式のテキストファイル(CR-LF行ターミネータ付き)を、シェルが要求するUnix形式のフォーマット(LF行ターミネータ付き)に変換します。マニュアルページを注意深く読んでください。ほとんどのテキストフィルタプログラムとは異なり、 'dos2unix'はファイルを置き換えます。 –

+0

@KeithThompsonそうです。インサイドの警告を含む!ありがとう! –

+0

もしあなたが 'dos2unix'を持っていなければ、これはうまくいくでしょう:' tr -d '\ r' < Test.sh > tmp; mv tmp Test.sh; chmod + x Test.sh' –

関連する問題