端末で別の文字列を使用するときの異なるエラーメッセージ

端末で別の文字列を使用するときの異なるエラーメッセージ

たとえば、端末を接続してunix.stackexchange.comEnter接続すると、次のエラーが発生します。

unix.stackexchange.com: command not found

予想通り大丈夫です。しかし、を挿入すると、http://unix.stackexchange.com別のエラーメッセージが表示されます。

bash: http://unix.stackexchange.com: No such file or directory

なぜエラーが発生するのか尋ねません。なぜ違うのか、そして最終的にどのプロセス/機能がこれを処理するのか知りたいです。

ベストアンサー1

また良いです乳泊が指摘した。、後者のコマンドラインにスラッシュ(/)が含まれており、シェルがそれをファイルパスとして解釈するため、エラーメッセージが異なります。

この場合、両方のエラーがシェルで発生しますbash(2番目のエラーメッセージでわかるように)。

より具体的には、最初のエラーは次にexecute_disk_command()定義された関数から来ます。execute_command.cbash-4.2ソースコードで定義された関数呼び出しは、execute_disk_command()スラッシュが含まれていない場合に検索されます。スラッシュが含まれている場合、この検索は実行されません。コマンドが返されない場合は、内部エラーにより失敗します。search_for_command()findcmd.cpathname$PATHpathnamepathnamesearch_for_command()search_for_command()execute_disk_command()command not found

2番目のエラーは、shell_execve()定義された関数でも発生しますexecute_command.c。この時点で、シナリオではルックアップは必要なく呼び出され、システムコールを実行するため、search_for_command()成功が返されます。実行したいファイルが存在せず、それを示す適切な設定があるため失敗します。失敗した場合は、対応するファイルエラーメッセージ()を報告し、エラーが発生したらすぐにシェルを終了するために使用されます。execute_disk_command()shell_execve()execve()execve()execve()errnoexecve()shell_execve()strerror()No such file or directory

おすすめ記事