 (Run without arguments to display this help.)

 --- 2025/05/25 (ver1.0) by Youichi Yamakawa (Nagoya University) ---
 Run a command for multiple files in parallel, with one job per file.
 Concurrency limit is taken from $OMP_NUM_THREADS, or defaults to the number of CPU cores.

  EXAMPLE #1: gzip compression of files
    # ./para-exec.sh gzip -9 a.txt b.txt c.txt
    --- It is interpreted as --- 
    # gzip -9 a.txt &
    # gzip -9 b.txt &
    # gzip -9 c.txt &
    # wait

  EXAMPLE #2: gz to xz
    # ./para-exec.sh zcat *.gz --pa-post='| xz > ${file%.*}.xz && rm $file'

  EXAMPLE #3: compile
    # ./para-exec.sh ifort *.f -c --pa-end='ifort *.o -o a.out && rm *.o'

  OPTIONS
    --pa-output       print the actual commands being executed
    --pa-confirm      prompt for confirmation before execution
    --pa-nocheck      do not check whether input files exist
    --pa-opts='***'   pass options that take arguments (e.g. --pa-opts='-o outfile')
    --pa-post='***'   post-processing for each job ($file expands to the target filename)
    --pa-end='***'    command to run after all jobs complete
    --pa-interval=*** execution check interval, default: 0.1 [sec]
    --pa-rcores=***   CPU cores required per job, default: 1

  NOTES
    1. Options that take arguments must be passed via --pa-opts (e.g. --pa-opts='-o outfile').
    2. For --pa-post and --pa-end, use ' not ".
    3. Set $OMP_NUM_THREADS=0 to run all jobs without a concurrency limit.
    4. To enable tab completion, add the following to ~/.bashrc:
      # complete -F _command para-exec.sh

