Обычно 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
команда печати какого-либо результата?
'test' является [Баш ключевое слово] (http://wiki.bash-hackers.org/commands/classictest), так что вы на самом деле не работает ваш исполняемый когда просто введите 'test' в командной строке. –
Наблюдает ли @ PaulR все ваши вопросы неактуальным, или вы все еще хотите знать поведение для * других имен программ? – usr2564301
В UNIX-подобных системах переменные среды передаются через указатель, традиционно называемый env или argen. main имеет подпись int main (int argc, char ** argv, char ** argenv). Не переносится в не-UNIX, конечно, –