Temos este comando GNU tar conforme mostrado:
$ tar -xjf /dev/st0 --to-command='sh -c '\''printf "%s\n" "$TAR_SIZE $TAR_REALNAME" >> "$TAR_ARCHIVE.sizes.txt"'\'
Existe alguma maneira de obtermos tar
o PID dentro dele --to-command
? Algo assim:
$ [...] --to-command='sh -c '\''printf "%s\n" "$TAR_SIZE $TAR_REALNAME" >> "$TAR_ARCHIVE.sizes. $TAR_PID .txt"'\'
(observe a adição de fictício $TAR_PID
perto do final)
Eu li as páginas de manual do GNU tar 1.34, mas não vejo nenhuma variável relevante.
Todas as implementações POSIX
sh
definem a$PPID
variável como o pid do pai do processo que a executou, então:Observe que essa variável não aparece na saída de
printenv
porque não é exportada para o ambiente (compreensivelmente porque seu valor é válido apenas para o shell atual), use oset
comando em vez doprintenv
comando para listar todas as variáveis do shell (que inclui um subconjunto daqueles relatadosprintenv
excluindo as variáveis de ambiente que não podem ser mapeadas para variáveis de shell).Se por algum motivo você
sh
não definiu a$PPID
variável, você sempre poderá fazer:Onde, graças ao
exec
, é o mesmo processo que roda osh
e entãotar
, então podemos disponibilizar seu pid($$
) naTAR_PID
variável de ambiente.Agora, desde
$TAR_ARCHIVE
e$TAR_PID
não mude, não há necessidade de reabrir o arquivo para cada arquivo e você pode redirecionar toda a saída de uma vez e usar>
em vez de>>
:Você também pode obter informações de tamanho e nome usando o
pax
comando padrão .Embora as implementações comumente encontradas em sistemas GNU/Linux na minha experiência não implementem essa
listopt
opção.GNU Tar 1.35 no meu sistema Arch Linux executa o comando em um shell, então isso gera o PID do tar para mim:
Exemplo:
Então talvez isso deva funcionar:
Testando: