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