我猜std::system
使用的shell 是sh
.但是,我不确定.
我试图打印shell,使用以下代码:std::system("echo $SHELL")
,输出为/bin/bash
.这对我来说很奇怪.所以,我想看看,如果我在sh
年这样做会发生什么?同样的输出:/bin/bash
.此外,如果我使用SHELL="/usr/bin/something"
这样的命令,将SHELL
变量设置为另一个字符串,它将打印我设置为它的新字符串(/usr/bin/something
),看起来这不是查看它使用的shell的好方法.然后,我try 使用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());
}
}
现在,它更容易测试,我认为,结果更好.
然后,我再次try 测试ps
命令,但在自定义shell中,结果是:test_shell
ps
.
又很奇怪了.shell 怎么不是sh
,也不是bash
?我做的最后一个测试是:echo $0
.在定制shell和普通程序中,结果都是sh
.
Edit
似乎/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
并不意味着运行shell(我在测试时不知道这一点,我只是想看看会发生什么))