たとえば、端末を接続してunix.stackexchange.com
再Enter接続すると、次のエラーが発生します。
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.c
bash-4.2
ソースコードで定義された関数呼び出しは、execute_disk_command()
スラッシュが含まれていない場合に検索されます。スラッシュが含まれている場合、この検索は実行されません。コマンドが返されない場合は、内部エラーにより失敗します。search_for_command()
findcmd.c
pathname
$PATH
pathname
pathname
search_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()
errno
execve()
shell_execve()
strerror()
No such file or directory