Articles

miljövariabler i Windows / macOS / Linux

Vad är miljövariabler?

miljövariabler är globala Systemvariabler tillgängliga för alla processer / användare som körs under operativsystemet (OS), till exempel Windows, macOS och Linux. Miljövariabler är användbara för att lagra systemomfattande värden, till exempel

  • PATH: den mest använda miljövariabeln, som lagrar en lista med kataloger för att söka efter körbara program.
  • OS: operativsystemet.
  • COMPUTENAMEUSERNAME: lagrar datorn och aktuellt användarnamn.
  • SystemRoot: systemets rotkatalog.
  • (Windows)HOMEDRIVEHOMEPATH: aktuell användares hemkatalog.

(Windows) miljövariabler

miljövariabler i Windows är inte skiftlägeskänsliga (eftersom äldre DOS inte är skiftlägeskänsliga). De namnges vanligtvis med versaler, med ord förenade med understreck (_), t.ex. JAVA_HOME.

Visa miljövariabler och deras värden

för att lista alla miljövariabler och deras värden, starta en CMD och utfärda kommandot ”set”, enligt följande,

// Display all the variables (in NAME=VALUE pairs)setCOMPUTERNAME=xxxxxxxOS=xxxxxxxPATH=xxxxxxx.......

försök att utfärda ett ”set” kommando på ditt system och studera de listade miljövariablerna. Var särskilt uppmärksam på variabeln PATH.

för att visa en viss variabel, använd kommandot ”set varname” eller ”echo %varname%”:

// Display a particular variableset COMPUTERNAMECOMPUTERNAME=xxxxxx// or, use "echo" command with variable name enclosed within a pair of '%'echo %COMPUTERNAME%COMPUTERNAME=xxxxxx

Ställ in/Unset/ändra en miljövariabel för den ”aktuella” cmd-sessionen

för att ställa in (eller ändra) en miljövariabel, använd kommandot ”set varname=value”. Det får inte finnas några mellanslag före och efter tecknet '='. För att avmarkera en miljövariabel, använd ”set varname=”, dvs Ställ in den på en tom sträng.

set varnameset varname=valueset varname=set
Display the value of the variableSet or change the value of the variable (Note: no space before and after '=')Delete the variable by setting to empty string (Note: nothing after '=')Display ALL the environment variables

For examples,

// Set an environment variable called MY_VARset MY_VAR=hello // Displayset MY_VARMY_VAR=hello // Unset an environment variableset MY_VAR= // Displayset MY_VAREnvironment variable MY_VAR not defined

An environment variable set via the ”set” command under CMD is a local, available to the current CMD session only. Try setting a variable, re-start CMD and look for the variable.

använda en miljövariabel

för att referera till en variabel i Windows, använd %varname%(med prefix och suffix av '%'). Du kan till exempel använda kommandot echo för att skriva ut värdet på en variabel i formuläret ”echo %varname%”.

// Display the PATH environment variableecho %PATH%PATH=xxxxxxx // Append a directory in front of the existing PATHset PATH=c:\myBin;%PATH%PATH=c:\myBin;

så här lägger du till eller ändrar en miljövariabel ”permanent”

för att lägga till/ändra en miljövariabel permanent i Windows (så att den är tillgänglig för alla Windows processer/användare och stannade över Stövlar):

  1. Starta ”Kontrollpanelen”
  2. ”System”
  3. ”Avancerade systeminställningar”
  4. Växla till fliken ”Avancerat”
  5. ”miljövariabler”
  6. Välj ”Systemvariabler” (för alla användare)
  7. för att lägga till en ny miljövariabel:
    1. Välj ”Nytt”
    2. ange variabeln ”namn” och ”värde”. Istället för att skriva ”värde” och göra skrivfel, föreslår jag att du använder ”bläddra i katalogen…”eller” bläddra i filen…”knappen för att hämta önskad katalog eller fil.
  8. för att ändra en befintlig miljövariabel:
    1. välj ” Redigera ”
    2. ange det nya”värdet”. Istället för att skriva ”värde” och göra skrivfel, föreslår jag att du använder ”bläddra i katalogen…”eller” bläddra i filen…”knappen för att hämta önskad katalog eller fil.

Du måste starta om CMD för att den nya inställningen ska träda i kraft!

för att verifiera den nya inställningen, starta CMD:

set VAR_NAMEVAR_NAME=VAR_VALUE

Path miljövariabel i Windows

När du startar ett körbart program (med filändelsen ”.exe.bat” eller ”.com”) från CMD-skalet söker Windows efter det körbara programmet i den aktuella arbetskatalogen, följt av alla kataloger som anges i PATH miljövariabel. Om programmet inte kan hittas i dessa kataloger får du följande fel:

// (Windows 2000/XP/Vista/7/8/10) "cmd.exe"abc'abc' is not recognized as an internal or external command,operable program or batch file. // (Windows 95/98) "command.com"abcBad command or file name

för att lista nuvarande PATH, problemkommando:

PATHPATH=path1;path1;path3;...

så här lägger du till en katalog till sökvägen i Windows

för att lägga till en katalog till det befintliga PATH I Windows:

  1. Starta ”Kontrollpanelen”
  2. ”System”
  3. ”Avancerade systeminställningar”
  4. Växla till fliken ”Avancerat”
  5. ” miljövariabler ”
  6. under” Systemvariabler ”(för alla användare), Välj”sökväg”
  7. ”redigera”
  8. (för nyare Windows 10) en tabell dyker upp som visar katalogerna som ingår i den aktuella SÖKVÄGSINSTÄLLNINGEN bläddra…”för att välja önskad katalog som ska läggas till i sökvägen (skriv INTE som du kommer att göra skrivfel!) Klicka på ”Flytta upp” upprepade gånger för att flytta den till toppen av ”OK” (avbryt inte”)” ok ”” ok”.
  9. (för äldre fönster) om du inte såg en popup-tabell är det dags att byta dator.

Du måste starta om CMD för att den nya SÖKVÄGSINSTÄLLNINGEN ska träda i kraft!

för att verifiera den nya inställningen, starta CMD:

PATHPATH=path1;path2;path3;...

anteckningar:

  • Windows söker i den aktuella katalogen (.) innan du söker i PATH poster. (Unixes / macOS söker inte i den aktuella katalogen, såvida du inte uttryckligen inkluderar den i sökvägen.)
  • Windows använder semikolon (;) som vägavskiljare; medan Unixes / macOS använder kolon (:).
  • Om ditt katalognamn innehåller specialtecken som mellanslag (rekommenderas starkt inte), bifogas det med dubbla citat.

(macOS/Linux) miljövariabler

miljövariabler i macOS / Unixes är skiftlägeskänsliga. Globala miljövariabler (tillgängliga för alla processer) namnges med versaler, med ord förenade med understreck (_), t.ex. JAVA_HOME. Lokala variabler (endast tillgängliga för den aktuella processen) är i små bokstäver.

använda miljövariabler i Bash Shell

de flesta Unixes (Ubuntu / macOS) använder det så kallade Bash-skalet. Underbash skal:

  • för att lista alla miljövariabler, använd kommandot ”env” (eller ”printenv”). Du kan också använda ”set” för att lista alla variabler, inklusive alla lokala variabler.
  • för att referera till en variabel, använd $varname, med ett prefix '$' (Windows använder %varname%).
  • för att skriva ut värdet för en viss variabel, använd kommandot ”echo $varname”.
  • för att ställa in en miljövariabel, använd kommandot ” export varname=value”, som ställer in variabeln och exporterar den till den globala miljön (tillgänglig för andra processer). Bifogat värdet med dubbla citat om det innehåller mellanslag.
  • för att ställa in en lokal variabel, använd kommandot ”varname=value” (eller ”set varname=value”). Lokal variabel är endast tillgänglig inom denna process.
  • för att avmarkera en lokal variabel, använd kommandot ”varname=”, dvs inställd på tom sträng (eller ”unset varname”).

så här ställer du in en miljövariabel permanent i Bash Shell

Du kan ställa in en miljövariabel permanent genom att placera ett export-kommando i ditt Bash-Skals startskript ”~/.bashrc” (eller "~/.bash_profile” eller ”~/.profile”) I din hemkatalog; eller ”/etc/profile” för systemövergripande operationer. Observera att filer som börjar med dot (.) är dolda som standard. För att visa dolda filer, använd kommandot ” ls -a ”eller”ls -al”.

Om du till exempel vill lägga till en katalog till PATH miljövariabel lägger du till följande rad i slutet av "~/.bashrc” (eller "~/.bash_profile” eller ”~/.profile”), där ~ betecknar den aktuella användarens hemkatalog eller ”/etc/profile” för alla användare.

// Append a directory in front of the existing PATHexport PATH=/usr/local/mysql/bin:$PATH

(för Java) Du kan ställa inCLASSPATH miljövariabler genom att lägga till följande rad. Till exempel

export CLASSPATH=.:/usr/local/tomcat/lib/servlet-api.jar

Observera att Bash shell använder kolon (:) som vägavskiljare; medan windows använder semikolon (;).

för att uppdatera bash-skalet, utfärda ett”source ” – kommando (eller starta om bash-skalet):

// Refresh the bash shellsource ~/.bashrc// orsource ~/.bash_profilesource ~/.profilesource /etc/profile

(anteckningar) för äldre csh (C-shell) och ksh (Korn-shell)

  • använd”printenv ”(eller”env”) för att lista alla miljövariabler.
  • använd ”setenv varname value” och ”unsetenv varname” för att ställa in och avmarkera en miljövariabel.
  • använd ”set varname=value” och ”unset varname” för att ställa in och avmarkera en lokal variabel för den aktuella processen.

PATH miljövariabel

de flesta Unixes och macOS använder det så kallade Bash-skalet i ”Terminal”. När du startar ett körbart program (med filbehörighet för körbar) i ett Bash-skal söker systemet programmet i alla kataloger som anges i PATH. Om programmet inte kan hittas får du följande fel:

abcbash: abc: command not found

Observera att den aktuella katalogen (.) inte söks, såvida den inte ingår i PATH. För att köra ett program i den aktuella katalogen måste du inkludera den aktuella sökvägen (./), till exempel

./myProgram

för att lista den aktuellaPATH, issue command:

echo $PATHpath1:path2:path3:...

så här lägger du till en katalog till sökvägen i macOS/Linux

om du vill lägga till en katalog till det befintliga PATH I macOS/Unixes lägger du till följande rad i slutet av ett av startskripten, till exempel "~/.bashrc~/.login"~/.bash_profile~/.profile” (där ~ betecknar den aktuella användarens hemkatalog) eller ”/etc/profile” för alla användare.

// Append a directory in front of the existing PATHexport PATH=/path/to/dir:$PATH

för att uppdatera bash-skalet, utfärda ett ”source” kommando (eller starta om bash-skalet):

// Refresh the bash shellsource ~/.bashrc// orsource ~/.bash_profilesource ~/.profilesource /etc/profile

för att verifiera den nya inställningen, starta CMD:

echo $PATHpath1:path2:path3:...

anmärkningar:

  • unixes/macOS söker inte i den aktuella katalogen (.), såvida du inte uttryckligen inkluderar det iPATH. Med andra ord, för att köra ett program i den aktuella katalogen måste du ange katalogen (./), till exempel
    ./myProgram

    du kan inkludera den aktuella katalogen i PATH, genom att lägga till den här raden i ett startskript:

    // Append the current directory (.) in front of the existing PATHexport PATH=.:$PATH

    (Windows söker i den aktuella katalogen (.) automatiskt innan du söker i sökvägen.)

  • Unixes / macOS använder kolon (:) som vägavskiljare; medan Windows använder semikolon (;).

Java-applikationer och miljövariablerna PATH, CLASSPATH, JAVA_HOME

många problem vid installation och körning av Java-applikationer orsakas av felaktig inställning av miljövariabler (globala Systemvariabler tillgängliga för alla processer/användare som körs under operativsystemet), i synnerhet PATHCLASSPATH och JAVA_HOME.

sökväg

När du startar ett program från kommandoraden använder operativsystemet PATH miljövariabel för att söka efter programmet i ditt lokala filsystem. Med andra ord, PATH upprätthåller en lista över kataloger för att söka körbara program.

sökväg (för Windows)

När du startar ett körbart program (med filtillägg av ”.exe.bat” eller ”.com”) från CMD-skalet söker Windows efter det körbara programmet i det aktuella arbetet katalog, följt av alla kataloger som anges i PATH miljövariabel. Om programmet inte kan hittas i dessa kataloger får du följande fel:

// (Windows 2000/XP/Vista/7/8/10) "cmd.exe"abc'abc' is not recognized as an internal or external command,operable program or batch file. // (Windows 95/98) "command.com"abcBad command or file name

Om du till exempel försöker använda Java-kompilatorn ”javac.exe” för att sammanställa en Java-källfil, men ”javac.exe” kan inte hittas i den aktuella katalogen och alla kataloger i PATH, kommer du att få följande fel:

javac Hello.java'javac' is not recognized as an internal or external command,operable program or batch file.

PATH upprätthåller en lista med kataloger. Katalogerna separeras med semikolon (;) I Windows.

för Java-applikationer måste PATH innehålla följande kataloger:

  • JDK: s ”bin” (binär) katalog (t.ex. ”c:\Program Files\java\jdk1.x.x\bin”), som innehåller JDK-program som Java Compiler ”javac.exe” och Java Runtime ”java.exe”.
  • c:\windows\system32”och”c:\windows ” som innehåller konsolprogram och kommandon.

JDK: s ”bin” katalog bör listas före ”c:\windows\system32” och ”c:\windows” IPATH. Detta beror på att vissa äldre Windows-system tillhandahåller sin egen Java runtime (som ofta är föråldrad) i dessa kataloger (försök söka efter ”java.exe” I din dator kan du hitta några poster).

för att lägga till en katalog (säg JDK: s ”bin”) till den befintliga sökvägen, kolla ”så här lägger du till en katalog i sökvägen”.

sökväg (för macOS/Linux)

de flesta Unixes och macOS använder det så kallade Bash-skalet i ”Terminal”. När du startar ett körbart program (med filbehörighet för körbar) i ett Bash-skal söker systemet programmet i alla kataloger som anges i PATH. Om programmet inte kan hittas får du följande fel:

abcbash: abc: command not found

Om du till exempel försöker använda Java-kompilator ”javac” för att kompilera en Java-källfil, men ”javac” kan inte hittas i listan över kataloger i PATH, kommer du att få följande fel:

javac Hello.javabash: javac: command not found

för att stödja Java-applikationer måste du inkludera JDK: s”bin ” (binär) katalog i sökvägen. Se”så här lägger du till en katalog i sökvägen”.

CLASSPATH

Java Archive (JAR) File

För att underlätta distributionen arkiveras Java-klasser ofta (zippade) tillsammans i en så kallad JAR-fil. Om du vill använda ett Java-paket från tredje part måste du placera den distribuerade JAR-filen på en plats som är tillgänglig för Java-kompilatorn och Java Runtime.

hur klasser hittas?

Java Compiler (”javac”), Java Runtime (”java”) and other Java tools searches for classes used in your program in this order:

  1. Java platform (bootstrap) classes: include system classes in core packages (java.*) and extension packages (javax.*) in ”rt.jar” (runtime class), ”i18n.jar” (internationalization class), charsets.jarjre/classes, and others.
  2. Java Extension Directories: Du kan kopiera de externa JAR-filerna till Java-tilläggskatalogen (detta tas bort och gäller inte från JDK 10).
    • för Windows finns Java-tilläggskatalogen på ”<JAVA_HOME>\jre\lib\ext” (t.ex. ”c:\Program Files\Java\jdk1.7.0_{xx}\jre\lib\ext”).
    • för macOS är JDK-tilläggskatalogerna ”/Library/Java/Extensions ”och”/System/Library/Java/Extensions”.
    • för Ubuntu är JDK-tilläggskatalogerna ”<JAVA_HOME>/jre/lib/ext ”(t.ex.”/usr/user/java/jdk1.7.0_{xx}/jre/lib/ext”) och”/usr/java/packages/lib/ext”.

    platsen för Java: s Tilläggskataloger lagras i Java: s Systemegenskap ”java.ext.dirs”. Du kan skriva ut innehållet via System.out.println(System.getProperty("java.ext.dirs")).

  3. sökväg för användarklasser (kort sagt, klassväg): bestämd i följande ordning:
    1. standardinställd i den aktuella arbetskatalogen (.).
    2. poster iCLASSPATH miljövariabel, som åsidosätter standardvärdet.
    3. poster i-cp (eller-classpath) kommandoradsalternativ, som åsidosätterCLASSPATH miljövariabel.
    4. kommandoradsalternativet runtime -jar, som åsidosätter alla ovanstående.

    sökvägarna för användarklassen hålls i Java-systemegenskapen ” java.class.path”.
    det rekommenderas att du använder kommandoradsalternativet -cp (eller -classpath) istället för att ställa in en permanent CLASSPATH miljö för alla Java-applikationer. IDE (som Eclipse/NetBeans) hanterar -cp-classpath) för var och en av applikationerna och förlitar sig inte på CLASSPATH miljö.

kan inte hitta klasser

om Java Runtime (”java”) inte kan hitta de klasser som används i ditt program på alla ovanstående platser kommer det att ge fel” kunde inte hitta eller ladda main class xxxx ”(JDK 1.7) eller ” java.lang.NoClassDefFoundError ” (före JDK 1.7).

På samma sätt kommer Java Compiler (”javac”) att utfärda kompileringsfel som ”kan inte hitta symbol”, ”paketet finns inte”.

anteckningar: Externa inbyggda bibliotek (”.lib.dll.a.so”) finns i en sökväg i Jres egendom ”java.library.path”, som normalt men inte nödvändigtvis innehåller alla kataloger i PATH miljövariabel. Annars får du ett runtime-fel”java.lang.UnsatisfiedLinkError: no xxx in java.library.path”.

CLASSPATH miljövariabel

CLASSPATH miljövariabel kan innehålla kataloger (innehåller många klassfiler) och JAR-filer (en enda fil arkiv av klassfiler). Om CLASSPATH inte är inställt, är det standard i den aktuella katalogen. Om du ställer in CLASSPATHär det viktigt att inkludera den aktuella arbetskatalogen (.). Annars kommer den aktuella katalogen inte att sökas.

ett vanligt problem med att köra hello-world-programmet är: CLASSPATH är inställt men inkluderar inte den aktuella arbetskatalogen. Den aktuella katalogen söks därför inte, vilket resulterar i ”Fel: Kunde inte hitta eller ladda huvudklass Hej”. Du kan helt enkelt ta bort CLASSPATH och lämna klassvägen som standard till den aktuella katalogen.

för en nybörjare krävs ingen uttrycklig CLASSPATH inställning. Standardinställningen CLASSPATH för aktuell katalog är tillräcklig. Ta bort alla CLASSPATH inställning om det finns någon. Men om du måste ställa in CLASSPATH, se till att du inkluderar den aktuella katalogen '.'.

PATH miljövariabel (för sökning av körbara program) är tillämplig på alla applikationer; medanCLASSPATH används endast av Java.

Läs JDK-dokument ”ställa in CLASSPATH ”och” hur klasser hittas ” (du hittar hyperlänkarna från indexsidan i JDK-dokumentationen eller googling).

CLASSPATH miljövariabel (för Windows)

CLASSPATH accepterar kataloger och jar-filer. Sökvägsposter separeras med semikolon (;).

exempel: visa och ändra CLASSPATH för den aktuella cmd-sessionen.

// Display current setting of CLASSPATHset CLASSPATH // Set CLASSPATH to the current directory and a JAR fileset CLASSPATH=.;d:\tomcat\lib\servlet-api.jar

Du kan ställa in CLASSPATH permanent. Se ”hur man ställer in en miljövariabel”.

CLASSPATH (för macOS / Ubuntu)
  1. för att ställa inCLASSPATH för den aktuella sessionen, utfärda detta kommando:
    export CLASSPATH=.:/usr/local/tomcat/bin/servlet-api.jar

    använd kolon ’:’som vägavskiljare (istället för semikolon’ ; ’ I Windows).

  2. för att ställa inCLASSPATH permanent, placera ovanstående exportkommando i initialiseringsskriptet bash shell (.bashrc eller .bash_profile I hemkatalogen eller /etc/profile för alla användare). Se ”hur man ställer in en miljövariabel”.

JAVA_HOME och JRE_HOME

många Java-applikationer (t.ex. Tomcat) kräver att miljövariabelnJAVA_HOME ställs in i JDK installerade katalogen.

så här ställer du in JAVA_HOME i Windows

kontrollera först om JAVA_HOME redan är inställt genom att starta en CMD och fråga:

set JAVA_HOME

om JAVA_HOME inte är inställt får du ”miljövariabel JAVA_HOME inte definierad”. Annars visas den aktuella inställningen.

för att ställa in / ändra JAVA_HOME I Windows:

  1. Starta ”Kontrollpanelen”
  2. ”System”
  3. ”Avancerade systeminställningar”
  4. Växla till fliken ”Avancerat”
  5. ”miljövariabler”
  6. Välj ”Systemvariabler” (för alla användare)
  7. för att lägga till en ny miljövariabel ”JAVA_HOME”:
    1. Välj ”Nytt”
    2. I ”variabelnamn” anger du ”JAVA_HOME”.
    3. i” variabelt värde ”klickar du på” Bläddra i katalogen…”och navigera till JDK installerade katalogen (t.ex. ”C:\Program Files\Java\jdk-15.0.xx”).
    4. OK, OK.
  8. Om du vill ändra den befintliga ”JAVA_HOME” inställning:
    1. Välj ”JAVA_HOME” redigera ”
    2. i”variabelt värde ”klickar du på” Bläddra i katalogen…”och navigera till JDK installerade katalogen (t.ex. ”C:\Program Files\Java\jdk-15.0.xx”).
    3. OK, OK.

Du måste starta om CMD för att den nya inställningen ska träda i kraft!

för att verifiera den nya inställningen, starta CMD igen:

set JAVA_HOMEJAVA_NAME=C:\Program Files\Java\jdk-13.0.1
så här ställer du in JAVA_HOME i Linux/macOS (Bash Shell)

kontrollera först om JAVA_HOME redan är inställt genom att starta en terminal och problem:

echo $JAVA_HOME

JAVA_HOME ska ställas in på JDK installerade katalogen. Du måste hitta din JDK installerade katalog.

hitta macOS och Ubuntu JDK installerad katalog.

Lägg till följande rad i slutet av "~/.bashrc ”(eller”~/.login”). Observera att filnamn som börjar med dot (.) är dolt som standard.

hur man un-hide för macOS / Ubuntu.

export JAVA_HOME=/path/to/JDK-installed-directory

Du måste uppdatera Bash-skalet för att de nya inställningarna ska träda i kraft. Utfärda ett”source”kommando enligt följande:

// Refresh the Bash Shellsource ~/.bashrc // or "source ~/.login"// Verify the new settingecho $JAVA_HOME

Windows vs Unixes/macOS

Java är plattformsoberoende. Java klasser körs i Windows samt Unixes-binär kompatibel.

  • Unixes har många skal, till exempel den nyare bash och den äldre cshksh. Windows har två skal: den nyare cmd.exeoch den äldre command.com. Varje skal har sin egen uppsättning kommandon, verktyg och sitt eget skriptprogrammeringsspråk.
  • Unix variabelnamn betecknas som $varname, t.ex. $CLASSPATH. Windows använder %varname%, t. ex., %CLASSPATH%.
  • Unix uses command ”printenv” (print environment) or ”env” to list all the environment variables. Windows uses command ”set”.
  • Unix’s PATH is set permanently in the login or shell initialization script (e.g., ”~/.login~/.profile~/.bashrc~/.bash_profile”, or ”/etc/profile”). Windows’ PATH is set permanently via Control Panel ⇒ System ⇒ ….
  • den aktuella katalogen ingår inte i Unix PATH implicit. För att köra ett program i den aktuella katalogen måste du utfärda ”./programName” där ”.” anger den aktuella katalogen. Det rekommenderas att inkludera den aktuella katalogen (.) I PATH explicit. Å andra sidan ingår aktuell katalog i Windows’ PATH implicit.
  • en Windows-sökväg innehåller en enhetsbokstav och kataloger. Varje enhet har en rotkatalog. Den använder back-slash '\' som katalogseparator (t.ex.”c:\jdk1.6\bin”). Linuxs vägar har inte enhetsbokstav. Det finns en enda rot. Unix använder framåt snedstreck '/'som katalogseparator (t.ex.”/usr/bin/jdk1.6”).
  • Windows använder semikolon ';' som vägavskiljare (t.ex. i PATH miljövariabel), medan Unix använder kolon ':'.
  • Windows / DOS använder ” 0D0AH ” (carriage-return plus line-feed) som line-break (eller End-Of-Line (EOL) eller newline). Unixes / macOS använder endast”0AH ” (linjematning).