Processo de substituição de comandos em linhas separadas de uma string

0

Eu tenho uma variável, COMMANDS , que contém uma lista de comandos separados por nova linha (eu sei, por exemplo, neste caso, que nunca haverá novas linhas, mas elas poderiam ser separadas por NUL ). Por exemplo,

echo "foo bar"
tail blah.txt
python3 -c 'print(1 + 10)'

Eu gostaria de invocar cada um desses, mas usando a substituição de processos, alimente-os todos como argumentos em outro programa. Continuando com o exemplo, se eu quisesse inserir cat , eu esperaria que o seguinte fosse executado:

cat <(echo "foo bar") <(tail blah.txt) <(python3 -c 'print(1 + 10)')

Existe alguma maneira de fazer isso dinamicamente? A melhor solução que pude encontrar foi construir este comando como uma string e fornecê-lo a bash -c :

bash -c "cat$(echo "$COMMANDS" | while read -r p; do printf ' <(%s)' "$p"; done)"

Mas isso parece um pouco frágil (e eu questiono sua capacidade de lidar de maneira robusta com casos de borda de entrada como citações).

Para qualquer pessoa que queira experimentar, aqui está um comando rápido para configurar o que usei como exemplo:

COMMANDS=$(printf 'echo "foo bar"\ntail blah.txt\npython3 -c "print(1 + 10)"')
echo blah > blah.txt
    
por Bailey Parker 30.08.2018 / 18:34

0 respostas