Radek
Radek

Reputation: 11091

Message "syntax error near unexpected token `('"

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

Answers (2)

Random832
Random832

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

user541686
user541686

Reputation: 210402

Try

sudo -su db2inst1 /opt/ibm/db2/V9.7/bin/db2 force application \(1995\)

Upvotes: 3

Related Questions