2017-07-14 15 views
-1

Ich führe ein Perl-Programm "a.pl" im Terminal, das ein anderes Programm "b.pl" aufrufen muss, das dann die Umgebung in eine tcl-Shell umwandelt. Das Programm "b.pl" setzt Umgebungsvariablen, die ich verwenden muss, zurück in das Hauptprogramm "a.pl", nach dem ich neue Befehle in der tcl-Umgebung ausführen muss, die von "b.pl" erstellt wurde. Bitte beachten Sie das folgende BeispielKommunikation zwischen Eltern- und Kindprozess - Perl

Programm: a.pl

#!/usr/intel/bin/perl -w 
    use strict; 
    use warnings; 

    #turns it to a tcl shell and sets environment variable VERSION 
    system ("./b.pl"); 

    system ("source <tclExecutable> -version $VERSION"); 

Der zweite System Befehl nicht ausführen, bis ich den Tcl-Shell manuell in dem Terminal verlassen. Ich habe auf die Gabel geschaut und eine Pfeife geöffnet, aber ich bin mir nicht sicher, wie ich das machen soll. Ich muss den zweiten Befehl in der tcl-Shell ausführen, die vom ersten Systembefehl geöffnet wurde. Wie kann ich das schaffen?

+1

Sie können nicht ein Elternteil die Umgebungsvariablen in einem untergeordneten Prozess eingestellt. – choroba

+0

* Wie * setzt b.pl env vars? –

+2

Das ist die merkwürdigste Art, ein Tcl-Skript auszuführen, das ich gesehen habe. Nun, diese Woche sowieso ... –

Antwort

0

Sie können b.pl "inside" a.pl mit require ausführen. Es kann liefern, was Sie für einfache Skripte wollen.

a.pl

use strict; 
use warnings; 

our $Version; 
require "/.../b.pl"; # full path to b.pl script 
print "Version: $Version\n"; 

b.pl

use strict; 
use warnings; 

our $Version; 
$Version = "YES!"; 
Verwandte Themen