2015-08-20 2 views
0

У меня есть удаленная оболочка unix, в которую я часто регистрирую файлы для проверки, но система продолжает сбросить настройки моих локальных пользователей при входе в систему. Я планировал написать код для выполнения списка команд при входе в систему.C++ для командной строки unix

#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

Как вы планируете запустить этот программа при входе в систему? От, скажем, '~/.profile'? Почему бы просто не поместить команды в '~/.profile' напрямую? – chepner

+0

Что не работает? Программа не выводит измененные переменные среды? –

+0

@chepner, потому что профиль очищается ежедневно – logger

ответ

2

cd встроенный в команду оболочки и влияет только на текущий процесс (то есть ток, протекающий оболочки).

При запуске system("cd insurancePPC.11"); запускается новая оболочка, новая оболочка изменяет каталог на insurancePPC.11 и завершает работу. На ваш собственный процесс не влияет эта команда cd.

Вы гораздо лучше записываете эти команды в текстовый файл и запускаете его как скрипт оболочки через команду source.

Создайте файл с именем 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 Или, если ваша оболочка поддерживает его, использовать сокращенную . myenv.sh

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 
Смежные вопросы