Existe uma maneira de verificar se um script bash está completo ou não?
Estou tentando implementar umREPL (loop de leitura e impressão de comentários) no bash. Se tal coisa já existe, por favor ignore o seguinte e responda esta questão com um ponteiro para ele.
Vamos usar esse script como um exemplo (nomeietest.sh
):
if true
then
echo a
else
echo b
fi
echo c
O que eu quero fazer é ler este script linha por linha, verificar se o que eu li até agora é uma expressão completa; se estiver completo,eval
isto; caso contrário, continue lendo a próxima linha. O roteiro abaixo ilustra a minha ideia com esperança (no entanto, não funciona bem).
x=""
while read -r line
do
x=$xMotivaçãoPara um script bash, quero analisá-lo em expressões sintaticamente completas, avaliar cada expressão, capturar a saída e, finalmente, marcar o código-fonte e a saída (digamos, usando Markdown / HTML / LaTeX / ...). Por exemplo, para um script
echo a
echo b
O que eu quero alcançar é a saída assim:
```bash
echo a
```
```
a
```
```bash
echo b
```
```
b
```
em vez de avaliar todo o script e capturar toda a saída:
```bash
echo a
echo b
```
```
a
b
```
\n'$line # concatenate by \n
# the line below is certainly a bad way to go
if eval $x 2>/dev/null; then
eval $x # code seems to be working, so eval it
x="" # empty x, and start collecting code again
else
echo 'incomplete expression'
fi
done < test.sh
MotivaçãoPara um script bash, quero analisá-lo em expressões sintaticamente completas, avaliar cada expressão, capturar a saída e, finalmente, marcar o código-fonte e a saída (digamos, usando Markdown / HTML / LaTeX / ...). Por exemplo, para um script
echo a
echo b
O que eu quero alcançar é a saída assim:
```bash
echo a
```
```
a
```
```bash
echo b
```
```
b
```
em vez de avaliar todo o script e capturar toda a saída:
```bash
echo a
echo b
```
```
a
b
```