「set」というプログラムが実行されないのはなぜですか?

「set」というプログラムが実行されないのはなぜですか?

以下のように単純なCプログラムを作成しました。

int main(int argc, char *argv[]) {

    if (argc != 5) {
       fputs("Not enough arguments!\n", stderr);
       exit(EXIT_FAILURE);
    }

パスを修正しました等/bash.bashrcこのように:

PATH=.:$PATH

私はこのプログラムをset.cとして保存し、次のようにコンパイルしました。

gcc -o set set.c

フォルダに

~/Programming/so

ところで、電話してみます。

set 2 3

何もしません。テキストは表示されません。

呼ぶ

./set 2 3

予想した結果を与えた

以前は PATH 問題が発生したことはありません。

which set

返品./set。したがって、PATHが正しいようです。どうしたの?

ベストアンサー1

whichを使う代わりに最も必要なときは動作しませんtype次のコマンドを入力したときに実行する項目を決定します。

$ which set
./set
$ type set
set is a shell builtin

シェルは検索する前に常に組み込み関数を探すので、ここでは$PATH設定は$PATH役に立ちません。

実行可能ファイルの名前を別のものに変更するのが最善ですが、ジョブでプログラム名を指定する必要がある場合は、setシェル関数を使用できます。

$ function set { ./set; }
$ type set
set is a function
set ()
{
    ./set
}

(これはで動作しますbashが、他のシェルではkshこれを許可しない可能性があります。より移植可能な解決策については、mikeservの答えを参照してください。)

これで、入力するとset「set」という関数が実行されます./set。 GNUはbash組み込み関数を見つけ、検索する前に関数を見つけます$PATH。 bashのマニュアルページの「COMMAND EXECUTION」セクションにこれに関する詳細情報があります。

builtincommandおよび:help builtinとのマニュアルも参照してくださいhelp command

おすすめ記事