Home > database >  Pass and read custom argument to an octave script from powershell/batch
Pass and read custom argument to an octave script from powershell/batch

Time:05-26

I would like to know if it possible to pass directly a custom argument when executing an octave script from Powershell/batch in general. Lets make an example:

$octaveExePath = "C:\Octave\Octave-7.1.0\mingw64\bin\octave-cli.exe"

# Executing the script
& $octaveExePath test.m "some_custom_string"

is there a way to receive the custom argument from inside the test.m script?

EDIT 1

I've done what suggested by @Ander without succes, I suppose that in this situation matlab and octave beaviuor are really different. My result making and example.m file

function []=example(arg1)
 disp(arg1)
endfunction

then calling it from powershell

& "C:\Octave\Octave-7.1.0\mingw64\bin\octave-cli-7.1.0.exe" example.m asd

Return the error

error: 'arg1' undefined near line 2, column 7
error: called from
    example at line 2 column 2

EDIT 2

To be more specific my goal is to know if there is a way to pass argument from a shell directly to an octave program without using some external file as done for example in this artcile

CodePudding user response:

I've elaborated a simple workaround that enable passing variables to an octave script while working in a Windows enviroment. The problem is that under Windows is not possible to create Octave executable programs as said in the documentation.

Anyway this workaround is somehow near to what suggested by @Tasos to which my deepest thanks go to.

Let's say we have a tentative.m file with a single line of code:

disp(external_variable)

whitout the variable declaration.

Outside we execute just a few powershell lines of code in sequence (be sure that the position of powershell is the same of where you created the script):

$octaveExePath = "C:\Octave\Octave-7.1.0\mingw64\bin\octave-7.1.0.exe"
$externalVariable = "just a little try"

& $octaveExePath --eval "external_variable='$($externalVariable)'; tentative" 

this result with the output:

just a little try

So, in this way I have successfully "passed" an external value to an octave script through external execution "bypassing" the fact that --eval and the FILE command line options are mutally exclusive (for what I know). The only point of warning is that while using this tecnique the non initialized variable (in the script) must be cordinated with the variable name evaluated extenally (the names must be the same).

I hope to have been clear and that this can help someone else, please consider to upvote in this case.

  • Related