Какую оболочку использует std::system?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Какую оболочку использует std::system?

Сообщение Anonymous »

TL;DR; Я предполагаю, что оболочка, которую использует std::system, — это sh. Но я не уверен.
Я попытался распечатать оболочку, используя этот код: std::system("echo $SHELL"), и на выходе получился /bin/bash. Для меня это было странно. Итак, я хотел посмотреть, что произойдет, если я сделаю это в sh? И тот же вывод: /bin/bash. Кроме того, если я использую команду типа SHELL="/usr/bin/something", чтобы установить для переменной SHELL другую строку, она напечатает новую строку, которую я ей установил (

Код: Выделить всё

/usr/bin/something
), и похоже, что это не лучший способ узнать, какую оболочку он использует. Затем я попытался проверить это, используя команду ps, и результат был: bash, a.out, ps. Было странно видеть в этом списке bash. Итак, я создал собственную оболочку и изменил ее в терминале gnome:

Код: Выделить всё

#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Вывод команды 
— /bin/sh -> bash), и на самом деле кажется, что единственная разница между sh и bash — это имя файла, а содержимое файлов одинаковое. Я также проверил разницу между этими файлами с помощью команды diff:

Код: Выделить всё

$ xxd /bin/sh > sh
$ xxd /bin/bash > bash
$ diff sh bash
(+ Да, $SHELL не означает работающую оболочку (я не знал этого, когда тестировал, и просто хотел посмотреть, что произойдет))

Подробнее здесь: https://stackoverflow.com/questions/711 ... system-use
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»