Exportera environment-variabel från C/C++
Exportera environment-variabel från C/C++
Hej!
Jag skulle villja exportera en envrionment-variabel från C/C++.
Alla de funktioner jag hittat hittils har skapat ett "eget" shell och skapat variabeln där, variabeln har alltså inte varit tillgänglig efter man stängt ner programmet.
De funktioner jag försökt med är: setenv(), putenv(), system().
Någon som har nåt hett tips?
Jag skulle villja exportera en envrionment-variabel från C/C++.
Alla de funktioner jag hittat hittils har skapat ett "eget" shell och skapat variabeln där, variabeln har alltså inte varit tillgänglig efter man stängt ner programmet.
De funktioner jag försökt med är: setenv(), putenv(), system().
Någon som har nåt hett tips?
Det är det som är problemet. Jag vill nämligen exportera variabeln http_proxy från mitt program och jag vill ju självklart att variabeln ska finnas kvar efter jag stängt ner programmet (annars är det ju ingen mening med att sätta en proxy).danne89 wrote:Det är setenv() som ska användas. Dock har jag för mig att föräldrens envirom inte påverkas.
Fler tips?
Mitt program är skrivet i Qt, tyvärr finns det inga klasser/funktioner som åstadkommer det jag vill i Qt heller. Det finns en klass som heter QSettings, men där går det heller inte att skapa några varaktiga environment variablar.drbrno wrote:I vilket sammanhang används ditt program? Det kan finnas knep du kan använda. Kort sagt måste du låta föräldern snappa upp ändringarna och själv ändra sin miljö.
li: Ok, skulle du kunna utveckla det där lite mer?
Nu kör jag, tyvärr widowwsz, så jag kan inte testa. Men frågan är om du inte kan starta programmet meed kommandot "source". Då kör man inom samma shell. Alternativt skapa en script-fil i programmet (med "export" av miljövariabel). Starta sriptet sedan med "source". Det finns även c-rutiner för att skriva till pipes....panzar wrote:li: Ok, skulle du kunna utveckla det där lite mer?
gentoo 3.0
arch 3.0
freeBSD 8.2
qemu/minix3
win/xp
arch 3.0
freeBSD 8.2
qemu/minix3
win/xp
Jag försökte mig på ditt förslag.li wrote: Nu kör jag, tyvärr widowwsz, så jag kan inte testa. Men frågan är om du inte kan starta programmet meed kommandot "source". Då kör man inom samma shell. Alternativt skapa en script-fil i programmet (med "export" av miljövariabel). Starta sriptet sedan med "source". Det finns även c-rutiner för att skriva till pipes....
Jag började med att skapa ett litet script för att exportera variablarna:
Code: Select all
#! /bin/bash
export ${1}=${2};
echo "$1 has the value of $2";
Code: Select all
#include <iostream>
using namespace std;
int main()
{
int out = system("source export.sh TEST 10");
cout << out << endl;
}
Men när jag försöker med "echo $TEST" från samma konsoll (efter programmet avslutats) så har $TEST inget värde - variabeln har alltså inte blivit exporterad.panzar@gentoop others $ ./test
TEST has the value 10
0
Jag kanske missförstod era förslag, säg gärna till i sådana fall.
/Per.[/quote][/code]
Jag är inte säker på vad du är ute efter. Men om du vill att ett skript som exekvera av ett annat ska kunna överföra variabler till föräldern så finns det ett par lösningar.Bjqrn wrote:Är det möjligt med ett script, jag skulle vilja göra ett modulariserat script, hälst utan inblandning av filer som foo och bar
Du kan t.ex. läsa in och exekverar det andra skriptet i samma skalomgivning med "source filnamn" (alt. ". filnamn"). Ett annat alternativ som används av bl.a. ssh-agent är att skriva ut kommandon på standard output som sedan evalueras av skalet för att sätta variablerna.
t.ex.
Code: Select all
# eval `skriptet.sh`
Mm, det är exakt vad jag vill göra - men jag vet inte riktigt hur jag ska bära mig åt (se mitt försök i föregående inlägg).mikma wrote: Jag är inte säker på vad du är ute efter. Men om du vill att ett skript som exekvera av ett annat ska kunna överföra variabler till föräldern så finns det ett par lösningar.
Ok, kan du visa något exempel på det här eller förklara lite mer?mikma wrote: Du kan t.ex. läsa in och exekverar det andra skriptet i samma skalomgivning med "source filnamn" (alt. ". filnamn").
Tack,
Per.
Source är ett inbyggt kommando i bash som du kan få lite information om med "help source".panzar wrote:Mm, det är exakt vad jag vill göra - men jag vet inte riktigt hur jag ska bära mig åt (se mitt försök i föregående inlägg).mikma wrote: Jag är inte säker på vad du är ute efter. Men om du vill att ett skript som exekvera av ett annat ska kunna överföra variabler till föräldern så finns det ett par lösningar.
Ok, kan du visa något exempel på det här eller förklara lite mer?mikma wrote: Du kan t.ex. läsa in och exekverar det andra skriptet i samma skalomgivning med "source filnamn" (alt. ". filnamn").
Tack,
Per.
Jag hittade ett exempel som använde source: http://www-106.ibm.com/developerworks/l ... bash3.html.
Enligt ditt inledande inlägg så ville du dock exportera variablerna från ett C/C++-program. Då kan du inte använda "source", det fungerar endast för att i ett skript läsa in och exekvera ett skript i samma skal.
/Mikael