【发布时间】:2014-06-21 05:13:10
【问题描述】:
我正在尝试制作一个将 export PATH="$PATH:/my/current/directory" 附加到我的 ~/.bash_profile 的可执行文件(我正在使用 g++ 编译 OSX 10.9.2。)现在我只是想让当前的工作目录到达当前的 shell(我想我是用 setenv() 把它放到一个子 shell 中,但我不知道这是否有帮助),我可以从那里拿它。
好的,源代码:
#include <iostream>
#include <string>
using namespace std;
int main(){
/*Add current directory to path (locally)*/
string CWD = getenv("PWD");
string endquote = "\"";
string mystring = "PATH=\"$PATH:";
mystring += CWD;
mystring += endquote;
// JUST TRYING TO GET THE PATH TO UPDATE IN SHELL
// WILL EVENTUALLY UPDATE THIS TO GO INTO .bash_profile
system(mystring);
system("echo $PATH");
return 0;
}
和错误:
setup.cpp:11:3: error: no matching function for call to 'system'
system(mystring);
^~~~~~
/usr/include/stdlib.h:177:6: note: candidate function not viable: no known conversion from 'string' (aka 'basic_string<char,
char_traits<char>, allocator<char> >') to 'const char *' for 1st argument
int system(const char *) __DARWIN_ALIAS_C(system);
^
1 error generated.
构造函数是走这里的路吗(将 const char * 更改为字符串)?我对它们了解不多,但到底是什么,我已经花了几个小时在这上面,所以我还不如多花点时间,对吧?
【问题讨论】:
-
system(mystring.c_str())怎么样? -
注意子进程不能修改其父进程的环境。可以修改bash启动文件,但不能实际修改环境。
-
@Ernest Friedman-Hill:很高兴知道这一点。