web-dev-qa-db-ja.com

「コマンドが見つかりません」エラーでプログラムを実行できません

WindowsからUbuntu 11.10に切り替えました。

テキストエディターを使用してCで次のコードを記述し、DocumentsにHelloWorld.cとして保存しました。

#include <stdio.h>
int main()
{
    printf("Hello World!\n");
    return 0;
}

そして、ターミナルを起動して、次のコマンドを入力します。

cd Documents

gcc HelloWorld.c

Googleで検索した後、実行可能ファイルであるa.outと呼ばれるファイル。次のコマンドを入力しました:

a.out

しかし、私は得る

a.out: command not found

どのステップを間違ってしましたか?

16
yihangho

現在の作業ディレクトリで実行可能ファイルを実行しているため、./というプレフィックスを付ける必要があります。したがって、プログラムでは./a.outとして実行します。

説明

端末は、$PATHで実行可能ファイルを検索します。これはUnix 環境変数 で、システムバイナリを含むディレクトリを一覧表示します(lsecho、_gccなど)。 $PATHディレクトリ(a.outなど)でnotではない実行可能ファイルを呼び出す場合、その絶対パスを指定する必要があります。ファイルシステム内。

端末では.は現在の作業ディレクトリの同義語であるため、./a.outです。 /home/yihang/Documents/a.outも同様に呼び出すことができます。

33
0x0

Linuxでコマンドを実行すると、PATH環境変数にリストされているすべてのディレクトリが検索され、そこでコマンドが見つからない場合は、表示されたメッセージが表示されます。

通常、次のようになります。

PATH=/usr/local/bin:/usr/bin:/bin

つまり、/usr/local/binで最初に表示されます。見つからない場合は、/usr/binなどを検索します。

実際、これはDOS/Windowsでも非常によく似ています:%PATH%という変数があり、まったく同じことを行います。

differenceは、Windowsでは現在のディレクトリも検索されることです。 Unixは、ローカルファイル(マルウェアなど)が重要なシステムプログラムを誤って上書きする可能性があるため、これを悪いと見なします。

ただし、それを好む場合は、パスに.を追加することにより、Linuxを同じように動作させることができます。

PATH=.:$PATH

(つまり、PATH.:に設定し、さらに$PATHの既存のコンテンツを設定します。)

最終的には次のようになります(マシンによって異なる場合があります)。

PATH=.:/usr/local/bin:/usr/bin:/bin

そうしたくない場合は、ディレクトリを明示的に指定して各プログラムを実行するだけです。

./myprog

または

/home/username/myprog
9
ams

基本的に、実行可能ファイルの名前を指定しなかったため、デフォルトでa.outが作成されます。代わりにこれを試してください:

gcc HelloWorld.c -o HelloWorld

これを行うと、「HelloWorld」の前にドットスラッシュ(./)を付けることで(Sunilが提案したように)呼び出すことができるはずです。

./HelloWorld

A.outが作成される理由について少し説明している記事へのリンクを次に示します。 LinuxでのCプログラムの作成とコンパイル

3
Aaron