A transferência de arquivos (por exemplo, --basefile, --transfer-file, --transfer, --return ) no GNU Parallel usa rsync 's /./ magic. Então, quando você pedir para transferir /tmp/common.sh , ele será colocado em /tmp/common.sh no lado remoto. Mas se você pedir para transferir /tmp/./common.sh , ele transferirá /tmp/common.sh para $(pwd)/. .
Em outras palavras:
(local file) => (remote file)
dir/file => ./dir/file
/tmp/sub/dir/file => /tmp/sub/dir/file
/tmp/sub/./dir/file => ./dir/file
O erro que você vê provavelmente se deve ao fato de / tmp ser um symlink no sistema remoto.
Se você usar --workdir ... , terá um novo workdir para cada trabalho. Como --basefile apenas copia o arquivo antes que o primeiro trabalho seja executado, isso não funcionará.
Em vez disso, você pode transferir common.sh para cada trabalho:
parallel --wd ... --tf {1} -S server 'pwd ; ls; echo {2}' ::: /tmp/./common.sh ::: foo bar