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


15

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

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


使用、それを実行可能にすることを忘れないでくださいsudo chmod 777 a.out
ニックShvelidze

@NickShvelidzeコンパイラは、ほとんど常に設定さ+xれています。chmodコンパイラによって生成された実行可能ファイルは必要ありません。gcc実行可能にするのに失敗する唯一の一般的な状況は、それをサポートまたは許可しないファイルシステムでファイルを作成している場合です(その場合、chmod直後にも失敗します)。また、777避けるべきです。すべてのユーザーが読み取り可能、書き込み可能、​​実行可能にする必要はありません。それがあればして実行するために必要なchmod、そしてchmod +x a.out十分であろう。
エリアケイガン

回答:


33

現在の作業ディレクトリで実行可能ファイルを実行しているため、プレフィックスを./。にする必要があります。だからあなたのプログラムのためにそれを実行します./a.out

説明

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

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


1
これについてさらに詳しく説明すると、「./」は「ここ」コマンドとして機能します。少し冗長ですが、何かを実行することを知っているという意味で便利です。
ルーベンバッカー

1
またchmod u+x a.out、システムによる実行を許可する必要があります。
チャールズブリッジ

今、「./」で取得します。プログラムはchmodなしで正常に実行されます。ありがとう。
イハンホ

1
@yihang:一番好きな回答の左側にある灰色/緑色の円をクリックして、この質問に回答済みのマークを付けることを検討してください。
ラファウシエラク

@Ruben Bakker:実際、それはまったく冗長ではありません。Windowsとは異なり、Linuxはデフォルトで現在のディレクトリまたはデフォルトのディレクトリを検索しません。したがって、パスにない場合は、ディレクトリを指定する必要があります。
マーティフライド

9

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

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

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

つまり、最初にになり/usr/local/binます。そこに見つからない場合は/usr/bin、などを調べます。

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

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

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

PATH=.:$PATH

(つまり、set PATHto .:に既存のコンテンツを加えたものです$PATH。)

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

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

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

./myprog

または

/home/username/myprog

2
に追加.する場合はPATH常に最後に追加します。
ムル

3

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

gcc HelloWorld.c -o HelloWorld

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

./HelloWorld

ここに、a.outが作成される理由について少し説明する記事へのリンクがあります:LinuxでのCプログラムの作成とコンパイル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.