TL;博士; 我猜使用的外壳std::system是sh. 但是,我不确定。
我尝试使用以下代码打印 shell:std::system("echo $SHELL"),输出为/bin/bash。这对我来说很奇怪。所以,我想看看,如果我这样做会发生什么sh?并且,相同的输出:/bin/bash。另外,如果我使用像 , 这样的命令SHELL="/usr/bin/something"将变量设置SHELL为另一个字符串,它将打印我设置给它的新字符串 ( /usr/bin/something),并且看起来这不是查看它正在使用的 shell 的好方法。然后,我尝试使用命令检查它ps,输出为:bash, a.out, ps。在这个列表中看到它很奇怪bash。因此,我创建了一个自定义 shell,并将 gnome-terminal 中的 shell 更改为它:
#include <iostream>
int main()
{
std::string input;
while (true)
{
std::string command;
std::getline(std::cin, command);
std::system(command.c_str());
}
}
Run Code Online (Sandbox Code Playgroud)
现在,测试更容易了,而且我认为结果更好。
然后,我尝试ps再次测试该命令,但在自定义 shell 中,结果是:test_shell, ps。
又奇怪了。外壳怎么不是sh,也不是bash?而且,我所做的最终测试是:echo $0。sh …