2016-12-02 2 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' является [Баш ключевое слово] (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 
Смежные вопросы