./はシェルで何を意味しますか?

./はシェルで何を意味しますか?

hello_world.c単純なファイルがあります。ここ。私はそれを行う方法を見つけました。

gcc -Wall -g hello_world.c -o hello 動作していますが、実行するとbash helloエラーが発生します。hello: hello: cannot execute binary file

sh helloその後、エラー:hello: 1: Syntax error: "(" unexpected
./hello予想される行が印刷されました。

3人は全く同じだと思いましたが、結果からではありません。なぜ他の2つは動作しないのですか?これに加えて、./helloこのファイルを呼び出す他の方法はありますかhello

答え1

最初の2回の試みbash helloでは、ファイルがシェル実行可能ファイルであることをこれらのシェル(およびsh helloそれぞれ)に確実にしようとします。バイナリファイルなので、シェルはファイルを実行するように指示され、何をすべきかわからないため、これらのエラーメッセージが表示されます。 3番目の例では、シェルが実行を期待するようにバイナリをバイナリとして実行します。これは、単に現在のディレクトリ()でバイナリを見つけることができる場所を示す表示にすぎません。なぜ必要ですか?ほとんどの場合、「現在の作業ディレクトリ」は変数の一部ではないため、単に実行しても実行可能ファイルをどこにも見つけることはできません。bashshhellohello./../$PATHhello

答え2

Linuxスクリプトを実行するために./(ドットスラッシュ)を使用するのはなぜですか?

Unix ./script構文は3つの部分で説明できます。

Linux./表記では、アプリケーションPATHの役割は、現在のディレクトリが既存のコマンドとの競合を避ける必要があることを示しています。

Unix ドットスラッシュと PATH 各コンピュータにはアプリケーションパスがあります。これは、実行可能コマンドまたは実行可能スクリプトが呼び出されたときにオペレーティングシステムが見つけるディレクトリの集まりです。

使い慣れた組み込みコマンド(ls、cat、echo、touch、chmodなど)はアプリケーションPATHにあります。ユーザーは通常、JDKまたはGitで一般的に使用されるプログラムをアプリケーションPATHに入れます。

問題は、自分で作成したスクリプトを呼び出そうとすると、そのスクリプトがアプリケーションパスに含まれているフォルダに保存されないことがあります。つまり、PATHでコマンドなどのカスタムスクリプトを実行すると、Linuxオペレーティングシステムはそのスクリプトを見つけることができません。

Linuxでは./の意味 ここにドットスラッシュ./記号が入るところです。これは「現在のディレクトリで検索」を意味します。 ./を使用すると、Ubuntu、Fedora、SUSE、または使用しているすべてのLinuxディストリビューションで実行するコマンドを現在のディレクトリで見つけ、アプリケーションPATの内容を完全に無視するように指示します。

関連情報