2016-12-02 86 views
0

通常,argv [0]與exec文件名相同。例如:PATH env和argv之間的關係[0]

  • 如果我執行程序與./my_program然後argv[0]./my_program
  • 如果我執行程序與/home/username/my_program然後argv[0]/home/username/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是shell內置命令。

而且還有./test之間有很大的差別(這是一個可執行文件),而test是一個命令傳遞直接到的,如果輸入不正確的外殼,它可能已經不承認比如可以說你使用命令tst結果將是-bash: tst: command not found

要檢查是否有任何字是shell的內置命令/保留關鍵字,請使用命令type

對終端

$type test 
test is a shell builtin 
$type if 
if is a shell keyword 
相關問題