通常argv [0]与exec文件名相同。例如:
\s+
执行程序,则./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
我无法理解,为什么knight@knight-desktop:~$ test
knight@knight-desktop:~$ ./test
./test
命令不打印任何结果?
答案 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