2016-12-02 9 views
0

一般に、argv [0]はexecファイル名と同じです。例えば:私はargv[0]/home/username/my_programで、その後/home/username/my_programしてプログラムを実行した場合、私はその後、argv[0]./my_programしてプログラムを実行した場合PATH envとargv [0]の関係。

  • ./my_program
  • です。

PATH=/home/username私の質問は、なぜargv[0]の値が見えないのですか?

この私の本当の状況です

PATH=/home/knight/bin:/home/knight/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/knight 

私のテストプログラムのソースは次のとおりです。

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
     printf("%s\n", argv[0]); 
} 

マイホームディレクトリは/home/knightあるので、私は直接プログラムを実行することができます。

[email protected]:~$ test 

[email protected]:~$ ./test 
./test 

[email protected]:~$ testコマンドで結果が表示されないのはなぜですか?

+5

'test'は[bashのキーワード](http://wiki.bash-hackers.org/commands/classictest)であるので、あなたが実際にするとき、あなたの実行可能ファイルを実行していませんコマンドプロンプトで 'test'と打ちます。 –

+1

@ PaulRの観察はあなたの質問全体を無関係にしますか?*他の*プログラム名の動作を知りたいのですか? – usr2564301

+0

UNIX系のシステムでは、環境変数は伝統的にenvまたはargenというポインタを介して渡されます。 mainはint main(int argc、char ** argv、char ** argenv)というシグネチャを持っています。もちろん、非UNIXの移植性はありません。 –

答えて

3

testはシェル組み込みコマンドです。 testコマンドが間違って入力した場合そのシェルに直接渡されている間

そして./testの間には大きな差がある(それは実行可能ファイルです)、それは例えば認識されていないされている可能性は、このコマンドを使用して言うことができますtst結果は-bash: tst: command not found

単語がシェルの組み込みコマンド/予約キーワードであるかどうかを調べるには、コマンドtypeを使用してください。端末上

$type test 
test is a shell builtin 
$type if 
if is a shell keyword 
関連する問題