Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Was bedeutet der Punkt vor dem Aufruf eines Skripts

Frage Linux

Mitglied: Cubic83

Cubic83 (Level 2) - Jetzt verbinden

08.04.2011 um 08:24 Uhr, 4162 Aufrufe, 6 Kommentare

Hallo,

ich habe hier ein Bash Skript vom Kollegen. Dieses Skript ruft ein weiteres Skript auf und benutzt Variablen aus dem ersten Skript. Wieso kann man im zweiten Skript nur auf die Variablen Zugreifen wenn man das zweite Skript mit einem Punkt startet. Hier ein Beispiel:

Datei 1

01.
 
02.
#!/bin/sh 
03.
 
04.
VARI="Hallo" 
05.
. ./DATEI2.sh 
06.
 
Datei 2
01.
 
02.
#!/bin/sh 
03.
echo $VARI 
04.
 
Ist der Code so geschrieben klappt es. Lass ich den Puntk weg ist $VARI leer ("./DATEI2.sh" anstatt ". ./DATEI2.sh")

Weiss vielleicht jemand wieso das so ist?

Danke schön,
mfG
Mitglied: Crusher79
08.04.2011 um 09:12 Uhr
Hi,

bin leider Bash Noob. Normal gibt aber ein einzelner Punkt das aktuelle Verzeichnis an. Wir sind quasi im akt. Verz und führen mit ./ das 2. Skript aus.
Bitte warten ..
Mitglied: dog
08.04.2011 um 09:38 Uhr
. ist der Include-Befehl in SH (in Bash gibt es auch noch source)
Dadurch wird die Datei praktisch in die andere eingesetzt.
Lässt du das weg wird die andere Datei schlicht aufgerufen und dann sind Variablen nur sichtbar, wenn sie exportiert wurden.
Bitte warten ..
Mitglied: Cubic83
08.04.2011 um 09:54 Uhr
Ah Ok,

wieder was dazu gelernt.

Vielen Dank
mfG
Bitte warten ..
Mitglied: reni09
10.04.2011 um 22:31 Uhr
Ich möchte es mal so erklären.

Normalerweise werden alle Scripte beim Starten in einer Sub-Shell abgearbeitet.
Das heißt, es gelten da nur Variablen, die auch in der Start (oder Vater-)Shell exportiert wurden.

In deinem 1. Script wird VARI aber nicht exportiert und damit diese Variable auch im nächsten Script gültig ist, wird es _ohne_ weitere Sub-Shell aufgerufen.
=> mit dem . wird also _keine_ weitere Sub-Shell aufgerufen, sondern das Script startet in der aktuellen Shell.

Oder Datei 1 so:

01.
#!/bin/sh 
02.
export VARI="Hallo" 
03.
sh ./DATEI2.sh
Bitte warten ..
Mitglied: Cubic83
11.04.2011 um 19:46 Uhr
Hallo,

danke für den Kommentar.

Was bedeutet denn eigentlich exportiert? Wird die Variable dann zu einer Supervariable (also im System definiert) oder ist sie nur im Hauptskript und den Unterskripts (Untershells) definiert?

mfG
Bitte warten ..
Mitglied: Biber
11.04.2011 um 19:56 Uhr
Moin Cubic83,

Letzteres. Die Variable steht in der aktuellen Umgebung (=in der aktuellen Shell-Instanz) zur Verfügung und ist dort sichtbar.
UND in allen "Child"-Instanzen, also neuen Shells (oder Unterprogrammen), die von ihr aufgerufen/neu gestartet werden.

Das darüberliegende "Super"-Environment ist zwar verfügbar (sichtbar), kann aber nicht dauerhaft geändert oder gar gelöscht werden.

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Monitoring
gelöst Smartmontools - Aufruf per Kommandozeile - Übergabe an Zabbix (4)

Frage von Knorkator zum Thema Monitoring ...

Windows 10
gelöst EventLog häufige Anzeige, was bedeutet diese? (5)

Frage von M.Marz zum Thema Windows 10 ...

Weiterbildung
Was bedeutet eigentlich DevOps ? (4)

Link von Sheogorath zum Thema Weiterbildung ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Windows Update
gelöst MS: Update-Server-Adressen OHNE Wildcards (17)

Frage von mrserious73 zum Thema Windows Update ...

Viren und Trojaner
Ransomware .nm4 (14)

Frage von Zyklo92 zum Thema Viren und Trojaner ...

Microsoft Office
+1.000 Ordner in Outlook: Wie besser? (11)

Frage von Matsushita zum Thema Microsoft Office ...