PATH env和argv [0]之间的关系

时间:2016-12-02 09:16:49

标签: c linux

通常argv [0]与exec文件名相同。例如:

  • 如果我使用\s+执行程序,则./my_programargv[0]
  • 如果我使用./my_program执行程序,则/home/username/my_programargv[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

我无法理解,为什么knight@knight-desktop:~$ test knight@knight-desktop:~$ ./test ./test 命令不打印任何结果?

1 个答案:

答案 0 :(得分:3)

因为test是shell内置命令。

./test(它是一个可执行文件)之间存在很大差异,而test是直接传递给shell的命令,如果输入错误,则可能无法识别它假设你使用命令tst,结果将是-bash: tst: command not found

要检查shell是否为内置命令/保留关键字,请使用命令type

终端

$type test
test is a shell builtin
$type if
if is a shell keyword