Я попытался распечатать оболочку, используя этот код: std::system("echo $SHELL"), и на выходе получился /bin/bash. Для меня это было странно. Итак, я хотел посмотреть, что произойдет, если я сделаю это в sh? И тот же вывод: /bin/bash. Кроме того, если я использую команду типа SHELL="/usr/bin/something", чтобы установить для переменной SHELL другую строку, она напечатает новую строку, которую я ей установил (
Код: Выделить всё
/usr/bin/somethingКод: Выделить всё
#include
int main()
{
std::string input;
while (true)
{
std::string command;
std::getline(std::cin, command);
std::system(command.c_str());
}
}

Теперь тестировать стало проще, и я думаю, что результаты лучше.
Затем я попробовал еще раз протестировать команду ps, но в пользовательской оболочке, и результат был: test_shell, ps.
Это снова было странно. Почему оболочка не ни sh, ни bash? И последний тест, который я провел, был: echo $0. И результат был sh, как в пользовательской оболочке, так и в обычной программе.
Изменить
Похоже, что /bin/sh связан с /bin/bash (
Код: Выделить всё
ll /bin/shВывод команды Код: Выделить всё
$ xxd /bin/sh > sh
$ xxd /bin/bash > bash
$ diff sh bash
Подробнее здесь: https://stackoverflow.com/questions/711 ... system-use
Мобильная версия