I would like to execute two or more commands back to back . But these commands are stored in a variable in my script. For example,
var="/usr/bin/ls ; pwd ; pooladm -d; pooladm -e"
The problem arises when I execute this variable via my script.
Suppose I go:
#!/bin/ksh -p
..
..
var="/usr/bin/ls ; pwd;pooladm -d; pooladm -e"
..
..
$var # DOES NOT WORK ..BUT WORKS WITH EVAL
It doesn’t work ..
But the moment I use eval :
eval $var
It works brilliantly.
I was just wondering if there is any other way to execute a bunch of commands stored in a variable without using eval.
Also , Is eval usage considered a bad programming practice because my coding standards appear to shun its usage than embrace it . Please do let me know.
Remember that the shell only parses the line once. So when you expand your $var, it becomes one string containing blanks. Since you have no executable named ‘/usr/bin/ls ; pwd;pooladm -d; pooladm -e’, it can’t run it.
On the other hand, eval takes its arguments are re-scans them, now you get ‘/usr/bin/ls’, ‘pwd’, and so on. It works.
evalis a little chancy because it leaves a possible security hole — consider if someone managed to get ‘rm -rf /’ into the string. But it’s a useful tool.