Estou trabalhando com um conjunto de scripts com funções tratadas como somente leitura. As funções são mais do que apenas uma lista de comandos, por exemplo, pode haver loops e alterar diretórios e até chamadas para outras funções:
func() {
cd folder/
run command1
mkdir folder2/ ; cd folder2/
run command2
}
Por um momento, fingindo que eu poderia mudar os scripts, para mostrar o que eu quero, pode ser assim:
func() {
cd folder/
string[0]="command1" ; run command1 |& tee out0.log ; result[0]="$?" ; finished_command_number 0
mkdir folder2/ ; cd folder2/
string[1]="command2" ; run command2 |& tee out1.log ; result[1]="$?" ; finished_command_number 1
}
Portanto, para comandos que podem ser canalizados, mas não for cd
ou loops, desejo armazenar uma string, armazenar o stdout (stderr), armazenar o código de saída e executar outro comando posteriormente. No entanto, não posso adicionar isso, deve ser feito no meu script que está invocando aquele com func().
Para obter apenas a funcionalidade de chamada de pós-comando, tentei copiar a função e executá-la do meu script com um trap foo debug
, mas isso não parece se propagar em funções. Não acho que copiar literalmente linha por linha funcionará porque o cd
e loops
não pode realmente ser isolado, pois são instruções de controle em vez de comandos de subshell.
Se as strings puderem ser apenas uma função dos próprios comandos, isso ainda será útil.