以下のように単純な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」セクションにこれに関する詳細情報があります。
builtin
command
および:help builtin
とのマニュアルも参照してくださいhelp command
。