Следующий код успешно перечисляет содержимое текущего каталога в Ubuntu Bash и MacOS Bash.
int main() {
char* args[3];
args[0] = "ls";
args[1] = NULL;
args[2] = NULL;
execvp(args[0], args);
return 0;
}
Следующий код ничего не печатает в Ubuntu Bash, но печатает ls is /bin/ls
в MacOS Bash.
int main() {
//pid_t pid = fork();
char * args[3];
args[0] = "type";
args[1] = "ls";
args[2] = NULL;
//if (!pid)
execvp(args[0], args);
return 0;
}
Когда я запускаю type
непосредственно в Ubuntu bash, он печатает ls is hashed (/bin/ls)
.
Разница в том, что type
является внутренней командой bash, а ls
- нет.Но почему bash в Ubuntu ведет себя иначе, чем в MacOS?
Ubuntu bash version: GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
MacOS bash version: GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Судя по номерам версий(что может быть неправильно), старая версия печатает вывод правильно, а новая - нет?