Para definir o cenário, aqui está um exemplo de estrutura de arquivo:
test/1
test/2
test/3
Eu quero fazer isso:
find -P -O3 "test/" -type f |
parallel --use-cpus-instead-of-cores -j+0 --tmpdir "test/" --files ./test.bash
E passe outro parâmetro manual para test.bash
tal que se for:
#!/usr/bin/env bash
main() {
echo "yay $1 $2!"
}
main "$1" "$2"
A saída de cat test/*.par
é:
yay test/1 param!
yay test/2 param!
yay test/3 param!
Eu tentei o seguinte:
parallel --use-cpus-instead-of-cores -j+0 --tmpdir "test/" --files ./test.bash ::: 'param'
parallel --use-cpus-instead-of-cores -j+0 --tmpdir "test/" --files ./test.bash {} ::: 'param'
Mas todos eles falham e priorizam o parâmetro manual sobre a entrada canalizada.
Existe uma maneira de realizar isso?
Isso é um pouco inseguro, porque os nomes dos arquivos podem conter delimitadores (novas linhas):
use em vez disso:
fazer
find
resultados separados pelo byte 0 (que não pode aparecer em nomes de arquivo), e fazerparallel
uso destes.No entanto, por que usar
find
? Usezsh
, em vez debash
,Finalmente encontrei a referência !