GNU parallel not working at all
I have been trying to use GNU parallel for some time, but I have never been able to get it to function at all!
For example, running (in a non-empty directory!):
ls | parallel echo # Outputs single new line
ls | parallel echo echo echo # Outputs three new lines.
ls | parallel echo {} # /bin/bash: {}: command not found
ls | parallel echo '{}' # /bin/bash: {}: command not found
ls | parallel 'echo {}' # Outputs: {}
ls | parallel -IMM 'echo MM' # Outputs: MM
It seems that it is simply executing each argument as a command, which makes no sense.
I have tried bash, zsh, tcsh, csh, and sh, to no avail.
As I was about to complete writing this question, I ran parallel --version
to report the version, only to find:
WARNING: YOU ARE USING --tollef. IF THINGS ARE ACTING WEIRD USE --gnu.
It is not clear to me why that flag is set by default. Needless to say, using --gnu
worked!
Thought I would post this to save someone hours of frustration and confusion.
EDIT:
To fix this permanently (in Ubuntu at least), delete the --tollef
flag in /etc/parallel/config
Depending on your operating system, you should check whether you're actually running the GNU version.
$ parallel --version
parallel: invalid option -- '-'
parallel [OPTIONS] command -- arguments
for each argument, run command with argument, in parallel
parallel [OPTIONS] -- commands
run specified commands in parallel
If this is the case, you're not running the GNU version. Ubuntu 12.04 is like this, and you'll need to manually install GNU parallel to get the functionality you expect.
Had issues running parallel as an external command from FREEMAT (MATLAB lookalike); the argumentFile was not fed to the command properly solved it by:
- Adding --gnu to options
- Not using cmdString syntax involving ["]
Code:
cmdString = 'parallel --gnu command ::: ';
while j<=jLength
cmdString = [cmdString argumentFilePath(j,:) ' '];
j=j+1;
end
system(cmdString)
Thank you for that :) Im on Ubuntu 12.04 as well.