我有一个远程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;
}
有谁能告诉我为什么这不能按预期工作?
答案 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