Reputation: 11091
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)"'
Upvotes: 17
Views: 115055
Reputation: 38980
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 -i
and -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 -s
option is really needed for your command and/or, if it would, if you'd be better served with sudo sh -c
.
Since you've got both the shell that you're typing into and the shell that sudo -s
runs, you need to quote or escape twice. Any of the following three would have worked with this now-ancient version of sudo:
sudo -su db2inst1 '/opt/ibm/db2/V9.7/bin/db2 "force application (1995)"'
sudo -su db2inst1 '/opt/ibm/db2/V9.7/bin/db2 force\ application\ \(1995\)'
sudo -su db2inst1 /opt/ibm/db2/V9.7/bin/db2 force\\ application\\ \\\(1995\\\)
Out of curiosity, why do you need -s
? Can't you just do the following?
sudo -u db2inst1 /opt/ibm/db2/V9.7/bin/db2 'force application (1995)'
sudo -u db2inst1 /opt/ibm/db2/V9.7/bin/db2 force\ application\ \(1995\)
Upvotes: 20
Reputation: 210402
Try
sudo -su db2inst1 /opt/ibm/db2/V9.7/bin/db2 force application \(1995\)
Upvotes: 3