When posting this question originally, I totally misworded it, obtaining another, reasonable but different question, which was correctly answered here.
The following is the correct version of the question I originally wanted to ask.
In one of my Bash scripts, there's a point where I have a variable SCRIPT
which contains the /path/to/an/exe
which, when executed, outputs a line to be executed
.
What my script ultimately needs to do, is executing that line to be executed
. Therefore the last line of the script is
$($SCRIPT)
so that $SCRIPT
is expanded to /path/to/an/exe
, and $(/path/to/an/exe)
executes the executable and gives back the line to be executed
, which is then executed.
However, running shellcheck
on the script generates this error:
In setscreens.sh line 7:
$($SCRIPT)
^--------^ SC2091: Remove surrounding $() to avoid executing output.
For more information:
https://www.shellcheck.net/wiki/SC2091 -- Remove surrounding $() to avoid e...
Is there a way I can rewrite that $($SCRIPT)
in a more appropriate way? eval
does not seem to be of much help here.
If the script outputs a shell command line to execute, the correct way to do that is:
eval "$("$SCRIPT")"
$($SCRIPT)
would only happen to work if the command can be completely evaluated using nothing but word splitting and pathname expansion, which is generally a rare situation. If the program instead outputs e.g. grep "Hello World"
or cmd > file.txt
then you will need eval
or equivalent.