FreeBSD QandA 690

FreeBSD QandA

Q. コマンドの実行例を教えてもらったので、さっそく実行しましたが 
   "Command not found." と叱られました。

A. どのように入力しましたか?

   1. "# foo" と入力しなさいと言われたので、そのまま "# foo" と入力した場合:

     コマンドの実行例を示す時に、プロンプトをつけて説明することがあります。
     今回の場合、"#" 自体がプロンプトで、入力するのは "foo" だけになります。

     プロンプトには、"#" のほかに "%" や "$" があります。これらの違いは、
     [管理番号 639] を参照してください。


   2. "foo" だけ入力した場合:

     そのコマンドがインストールされていないか、そのコマンドのあるディレクトリ
     にパスが通っていません。

     まずそのコマンドが存在するか確認してください。次のように find(1) を使う
     と簡単です。

        % find / -name foo -print

     これで foo が見つからなければ、インストールされていません。

     見つかったならば、パスが通っていません。絶対または相対パス付でコマンドを
     指定してください。たとえば、find(1) によって /usr/local/sbin/foo と表示
     されたら

       /usr/local/sbin/foo

     と入力してください。よく使うコマンドならば、そのディレクトリをパスに
     追加しましょう。

       % setenv PATH ${PATH}:/usr/local/sbin (csh・tcsh 系の場合)
       % PATH=${PATH}:/usr/local/sbin        (sh ・bash 系の場合)

     これで "foo" と入力しただけで /usr/local/sbin/foo が実行できるようになります。
     なお、カレントディレクトリ (.) はパスに加えないようにしましょう。
       → [管理番号 130]

   3. 絶対パスまたは相対パスを指定してもダメな場合:

     foo は、スクリプトでありませんか? スクリプトを実行するプログラムが見つから
     ないときにも、このエラーメッセージが表示されます。foo の 1行目が

       #!/dokokano/nanntoka

     のようになっているなら、/dokokano/nanntoka が存在して実行可能であることを
     確かめてください。nanntoka が別のところにあれば、正しいディレクトリ指す
     ようにさすように 1行目を書き換えてください。

     それでも Command not found となる場合は、
       % head -1 foo | hd
     として、1行目をダンプしてみてください。もし

       00000000  23 21 2f 64 6f 6b 6f 6b  61 6e 6f 2f 6e 61 6e 6e  |#!/dokokano/nann|
       00000010  74 6f 6b 61 0d 0a                                 |toka..|

     となっているなら、Windows・DOS の改行コード 0x0D 0x0A になっているため、

       #!/dokokano/nanntoka(0x0D)

     というコマンドを実行しようとして失敗している、ということです。UNIX の
     改行コードは 0x0A ですので、

       00000000  23 21 2f 64 6f 6b 6f 6b  61 6e 6f 2f 6e 61 6e 6e  |#!/dokokano/nann|
       00000010  74 6f 6b 61 0a                                    |toka.|

     となるように修正して下さい。お手軽な改行コード変換の方法としては、

       % qkc -u file

     があります。qkc は japanese/qkc として port/package に含まれています。

間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。