Question

I'm running gnu-parallel on a command that works fine when run from a bash shell but returns an error when parallel executes it with bash using the -c flag. I assume this has to do with the special globbing expression I'm using.

ls !(*site*).mol2

This returns successfully.

With the flag enabled the command fails

/bin/bash -c 'ls !(*site*).mol2'
/bin/bash: -c: line 0: syntax error near unexpected token `(' 

The manual only specifies that -c calls for bash to read the arguments for a string, am I missing something?

Edit: I should add I need this to run from a gnu-parallel string, so the end resultant command must be runnable by /bin/bash -c "Some Command"

Was it helpful?

Solution

You should try the following code :

bash <<EOF
shopt -s extglob
ls !(*site*).mol2
EOF

Explanation :

when you run bash -c, you create a subshell, and shopt settings are not inherited.

EDIT

If you really need a one liner :

bash -O extglob -c 'ls !(*site*).mol2'

See this thread

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top