Estou executando o seguinte script no Ubuntu 22.04:
#!/bin/bash
logfile="/absolute/path/to/log.txt"
find /absolute/path/to/haystack -type d -name "needle" -execdir sh -c 'pwd > $logfile' \;
A esperança é que ele imprima o caminho completo do diretório de cada pasta nomeada needle/
dentro da pasta haystack/
para o arquivo log.txt
. Em vez disso, ele imprime nada além de uma longa lista do erro sh: 1: cannot create : Directory nonexistent
para a saída padrão (e não grava nada em log.txt
).
Esta resposta demonstra que o erro se origina no Dash, não no Bash. Como estou usando o Bash shebang, isso significa que o erro deve ser originado do uso de-execdir sh
-execdir sh -c 'pwd > $logfile' \;
já que no Ubuntu sh
é symlinked para Dash. Minha primeira teoria foi que o Bash não está passando sua variável $logfile
para Dash. Esta resposta afirma que as variáveis são copiadas para subshells, o que foi meu entendimento, mas talvez isso não seja verdade em shells completamente diferentes. Para testar, alterei o shebang para #!/bin/sh
, que é Dash neste sistema. O resultado é o mesmo, no entanto: linhas do erro sh: 1: cannot create : Directory nonexistent
.
O que causa esse erro?
Qualquer ajuda é bem-vinda, mas observe que postei porque quero entender a origem do erro, assim como a pergunta pede. Não estou interessado em nenhuma resposta que tenha uma abordagem diferente para listar needle/
diretórios, a menos que essa resposta seja acompanhada por uma explicação do motivo pelo qual esse script falha.