Home   Archive   Permalink



PASSING PARAMETERS FROM ONE SCRIPT TO ANOTHER

How do I pass a parameter from one script to another script ?
    
e.g if I have script1.r and script2.r
    
and I want to pass a parameter "hello" from within script1.r to script2.r
    
e.g in script1.r I try something like this
    
do %script2.r "Hello"
    
    
then in script2.r how do i retrieve the parameter "Hello"
    
I tried, the system/script/args in script2.r it did not work.
    
I tried the system/options/args in script2.r too it did not work.


posted by:   PASS PARAMETERS     18-Oct-2017/21:23-7:00



You can try:
    
do/args %script2.r "Hello"
    
Then check system/script/args in %script2.r

posted by:   Chris     19-Oct-2017/1:08:34-7:00



You can also save values to a third file:
    
write %data "Hello"
write %script2.r "R E B O L [] print read %data halt"
launch %script2.r
    
Or if you need to pass data to a second script in real time, send it over a network connection:
    
write %script2.r {R E B O L []    
port: open/lines tcp://localhost:55555
insert port ask "Send: "}
launch %script2.r
port: first wait open/lines tcp://:55555
print join "Received: "first wait port
    
Additionally, you can write data directly into a dynamically created script, and then execute that script some time later:
    
x: "Hello"
write %script2.r rejoin [{R E B O L [] print "} x {" halt}]
launch %script2.r

posted by:   Nick     19-Oct-2017/8:09:23-7:00



(remove the spaces in the REBOL header in each of the examples above)

posted by:   Nick     19-Oct-2017/8:18:31-7:00



BTW, you can also use 'call to run command line arguments:
    
call/show "rebol -h"

posted by:   Nick     19-Oct-2017/10:05:10-7:00



thank you Nick for the different ways of passing info between scripts.

posted by:   PASS PARAMETERS     22-Oct-2017/10:26:21-7:00



If you use Windows, you could use the clipboard if you don't suddenly use it for something else and cause a conflict:
    
R E B O L []
    
write %passtest2.r {R E B O L []
PASSED-TEXT: read clipboard://
print ["passtest2 has received " PASSED-TEXT]
halt
}
    
write clipboard:// "Hello"
print "Calling passtest2.r"
launch %passtest2.r
print "passtest2.r has been called"
halt
    


posted by:   Steven White     23-Oct-2017/13:15:44-7:00



As a side note of possible interest, I ran across a similar problem at work and found out that Windows has a program called clip.exe that can load the clipboard. This makes it possible for a powershell script to pass text to a REBOL script. In powershell you could have something like:
    
$PASSEDTEXT = "Hello"
$PASSEDTEXT | clip
    
Then have the powershell script run the REBOL interpreter with the --script option to specify the REBOL script. In REBOL do:
    
PASSEDTEXT: read clipboard://
    
A bit off topic but I thought I would mention it while it is fresh in my memory.

posted by:   Steven White     28-Oct-2017/11:02:46-7:00



"...
    
BTW, you can also use 'call to run command line arguments:
        
call/show "rebol -h"
    
..."
If you were running a command line argument that could do several things could you run make a GUI window with Rebol then pass arguments by calling a shell every time? What would close the shell? Does it close after being called or would you be continuously starting new shells every time you sent arguments to a CL program?

posted by:   Sam the Truck     1-Nov-2017/12:10:52-7:00



You can use call/show show to run a script on the command line, and it executes in a new Rebol process. Nothing else about the script or the process is different from any other Running Rebol script. Close the process within the script if you want:
    
call/show {rebol script2.r}

posted by:   Nick     2-Nov-2017/7:35:24-7:00



Thanks.

posted by:   Sam the Truck     23-Jan-2018/19:06:29-8:00