ホームページ  >  記事  >  バックエンド開発  >  シェルスクリプト実行時に「そのようなファイルまたはディレクトリがありません」という問題を解決する方法

シェルスクリプト実行時に「そのようなファイルまたはディレクトリがありません」という問題を解決する方法

高洛峰
高洛峰オリジナル
2017-01-09 13:42:524191ブラウズ

悪いインタープリター:そのようなファイルやディレクトリが表示されない理由は、ファイル形式の問題です。このファイルは Windows で作成されました。改行メソッドはUnixとは異なりますが、vim上で設定しないと全く表示されません。

問題分析:
1. Windows で作成された SHELL ファイルを Linux に転送して実行すると、エラー メッセージが表示されます。
2. エラー メッセージ: 不正なインタープリター: そのようなファイルまたはディレクトリはありません。

問題の原因:
オペレーティングシステムはWindowsであり、スクリプトはWindows上で編集されているため、非表示の文字が存在する可能性があります。スクリプト ファイルは DOS 形式です
、つまり、各行の終わりは rn で識別され、その ASCII コードは 0x0D、0x0A です。

解決策:
ファイルが DOS 形式であるか UNIX であるかを確認する方法はたくさんあります。形式はまだ MAC 形式です
(1) vim ファイル名
次に、コマンド set ff
を使用して dos または unix という単語を確認します。実際に dos 形式である場合は、set ff=unix を使用して強制的に unix にします。フォーマットし、保存して終了した後に実行できます。
1. unix2dos または dos2unix という 2 つの小さなプログラムを使用して、さまざまなプラットフォームでテキスト ファイル形式を変換できます。djgpp では、これら 2 つのプログラムの名前は dtou と utod で、u は unix を表し、d は を表します。 dos
2 . sed などのツールを使用することもできます:

sed ‘s/^M//' filename > tmp_filename
mv -f tmp_filename filename
特記事項: ^M は、Shift + 6 を押して生成される ^ および文字 M ではありません。これは文字であり、その ASCII は 0x0D です。これを生成するには、最初に CTRL +V を押してから Enter (または CTRL+M) を押します


さらに、SHELL プログラムがコマンドが見つからないと報告する場合は、プログラムが使用する必要があるすべてのコマンドが PATH に含まれているかどうかを必ず確認してください。 (絶対パスは指定しません)) このような小さなプログラムであれば、一行ずつ確認することができます。

添付: 1 つ少なく書くことでファイルやディレクトリの問題が発生することはありません /


今日、以前に書いた簡単なシェル スクリプトを調べていたときに、問題を見つけました:

./ を実行すると、常にプロンプト: (bash: . /hello.sh: bin/bash: bad interpreter: no such file or directory) ただし、sh で実行すると修正されます

元のスクリプト:

(次の場所でエラーを見つけられるかどうかを確認してください。ちらっと)

rreee

その後、何度か確認したところ、自分が書いた内容に何かが欠けていることがわかりました

最初の行を #!/bin/bash に変更する必要がありましたが、/

ああ、それは です。非常に単純な問題です。以前は見つかりませんでした。このようなエラーは確かにあります。シェル スクリプトは確かに使いやすいですが、唯一の問題は、形式要件が高すぎることです。

「そのようなエラーはありません」という問題のその他の解決策については、ファイルまたはディレクトリ」をシェル スクリプトで実行する場合は、PHP 中国語 Web サイトの関連記事に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。