I am trying to execute
sudo -su db2inst1 /opt/ibm/db2/V9.7/bin/db2 force application (1995)
but I get this error:
bash: syntax error near unexpected token `(‘
However,
sudo -su db2inst1 id
gives me correct output. So it must be something about the ()
If I try
sudo -su db2inst1 /opt/ibm/db2/V9.7/bin/db2 force application \(1995\)
I get
/bin/bash: -c: line 0: syntax error near unexpected token
(' \ /bin/bash: -c: line 0:/opt/ibm/db2/V9.7/bin/db2 force application (1995)’
Running /opt/ibm/db2/V9.7/bin/db2 force application (1995) as db2inst1 user gives me the same error, but running
/opt/ibm/db2/V9.7/bin/db2 "force application (1995)"
works fine
The right syntax is
sudo -su db2inst1 '/opt/ibm/db2/V9.7/bin/db2 "force application (1995)"'
NOTE: While this answer seems to have been correct at the time [sudo was changed later that same year to add extra escaping around characters in the arguments with
-iand-s], it is not correct for modern versions of sudo, which escape all special characters when constructing the command line to be passed to$SHELL -c. Always be careful and make sure you know what passing a command to your particular version of sudo will do, and consider carefully whether the-soption is really needed for your command and/or, if it would, if you’d be better served withsudo sh -c.Since you’ve got both the shell that you’re typing into and the shell that
sudo -sruns, you need to quote or escape twice. Any of the following three would have worked with this now-ancient version of sudo:Out of curiosity, why do you need
-s? Can’t you just do the following?