用于unix命令行操作的c ++

时间:2015-08-20 13:54:59

标签: c++ shell unix

我有一个远程unix shell,我经常登录结帐文件,但系统在我登录时会不断重置我的本地设置。 我打算在登录时编写代码来执行命令列表。

#include<iostream>
#include<stdlib.h>

int main(){
 char javah[]="JAVA_HOME=/appl/usr/jdk/jdk1.6.0_20";
 char anth[]="ANT_HOME=/appl/usr/ant/instances/1.8.2";
 char path[]="PATH=$ANT_HOME/bin:$PATH";

    system("bash");
    system("cd");
    system("cd insurancePPC.11");
    system("0x0C");
    system("ls");

    putenv(javah);
    putenv(anth);
    putenv(path);
    std::cout << "JAVA_HOME=" << getenv("JAVA_HOME");
    std::cout << "\n";
    std::cout << "ANT_HOME=" << getenv("ANT_HOME");
    std::cout << "\n";
    std::cout << "PATH=" << getenv("PATH");
    std::cout << "\n";

    system("cd tools");
    std::cout << "command executed successfully...\n";
    return 0;
}

有谁能告诉我为什么这不能按预期工作?

2 个答案:

答案 0 :(得分:2)

这里没有必要编写C程序。只需将以下内容保存为mysettings.sh

export JAVA_HOME=/appl/usr/jdk/jdk1.6.0_20
export ANT_HOME=/appl/usr/ant/instances/1.8.2
PATH=$ANT_HOME/bin:$PATH
cd tools

登录时,请运行

. mysettings.sh

答案 1 :(得分:2)

cd是shell的内置命令,仅影响当前进程(即当前运行的shell)。

运行system("cd insurancePPC.11");时,它会启动一个新的shell,新的shell会将目录更改为insurancePPC.11并退出。您自己的进程不受cd命令的影响。

最好不要在文本文件中编写这些命令,并通过source命令将其作为shell脚本运行。

使用以下内容创建名为myenv.sh的文件:

JAVA_HOME=/appl/usr/jdk/jdk1.6.0_20
export JAVA_HOME
ANT_HOME=/appl/usr/ant/instances/1.8.2
export ANT_HOME
PATH=$ANT_HOME/bin:$PATH
export PATH
cd
cd insurancePPC.11
ls

echo JAVA_HOME=$JAVA_HOME
echo ANT_HOME=$ANT_HOME
echo PATH=$PATH
cd tools

从命令行运行source myenv.sh或者如果你的shell支持它,请使用简写. myenv.sh