はまず、あなたの変数はxfile
ですが、リテラルx
が先行変数file
を使用しようとします。 x$file
は$xfile
になるはずです。
第2に、ファイルごとにfile
コマンドを実行し、毎回values
ファイルを上書きすると、最後のファイルのみが表示されます。これを修正するには、先にファイルを削除し、>
(上書き)の代わりに>>
(追加)を使用します。あなたが本当に唯一必要なので
第三に、file
コマンドが複数の引数を処理する完全に可能である。また、使用しています
file * >values
*
*.*
はWindows/DOSのthingieがある - あなたは、UNIXの下にあるすべてのファイルをしたい場合*
は正しい形式です(隠しファイルが必要な場合は.*
も同様です)。
そして最後に、上記のこれらの提案はいずれもほぼ確実にあなたのファイルにDOS形式の行末の存在であるあなたの実際問題は、解決しません。そのエラーメッセージはの完全なに該当します。
私のシステムでは、DOSの行末でスクリプトを入力すると、ほとんど同じエラーメッセージが表示されます。間違った行末を示す\r
文字で
0000020 0a0d 6f64 0a0d 6966 656c 2220 7824 6966
\r \n d o \r \n f i l e " $ x f i
015 012 144 157 015 012 146 151 154 145 040 042 044 170 146 151
:あなたがod -xcb check.sh
を行う場合
、あなたが最も可能性が高いようなものが表示されます。
あなたが閲覧し、これらを削除するか(あなたはこれをすでに持っているかもしれませんが)単にapt-get
とdos2unix
をインストールするには、お気に入りの(まともな)エディタを使用することができますし、実行します。
# sudo apt-get install dos2unix ## only if you don't have it already.
dos2unix check.sh >check2.sh
、その後check2.sh
を使用します。シングルライン、覚えておいて、けれども
:
file * >values
は(しかし、あなたはまだあなたがUNIXの行末を使用していることを確認したいと思う)まだfor
ループより良いオプションです。
wow thanks paxdiablo – klijo
偉大な答え! +1 –