czy istnieje sposób na sprawdzenie, czy skrypt bash jest kompletny czy nie?

Próbuję zaimplementowaćREPL (pętla do odczytu-odczytu) w bashu. Jeśli coś takiego już istnieje, zignoruj ​​poniższe i odpowiedz na to pytanie wskaźnikiem do niego.

Użyjmy tego skryptu jako przykładu (nazwijmy totest.sh):

if true
then
  echo a
else
  echo b
fi
echo c

Chcę tylko przeczytać ten skrypt wiersz po wierszu, sprawdzić, czy to, co do tej pory przeczytałem, jest kompletnym wyrażeniem bash; jeśli jest kompletny,eval to; w przeciwnym razie czytaj dalej następną linię. Poniższy skrypt ilustruje mój pomysł z nadzieją (choć nie do końca działa).

x=""
while read -r line
do
  x=$xMotywacja

W przypadku skryptu bash chcę go przetworzyć na wyrażenia kompletne składniowo, ocenić każde wyrażenie, przechwycić dane wyjściowe, a na koniec oznaczyć kod źródłowy i wynik (powiedzmy za pomocą Markdown / HTML / LaTeX / ...). Na przykład dla skryptu

echo a
echo b

To, co chcę osiągnąć, to wynik podobny do tego:

```bash
echo a
```

```
a
```

```bash
echo b
```

```
b
```

zamiast oceniać cały skrypt i przechwytywać cały wynik:

```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
Motywacja

W przypadku skryptu bash chcę go przetworzyć na wyrażenia kompletne składniowo, ocenić każde wyrażenie, przechwycić dane wyjściowe, a na koniec oznaczyć kod źródłowy i wynik (powiedzmy za pomocą Markdown / HTML / LaTeX / ...). Na przykład dla skryptu

echo a
echo b

To, co chcę osiągnąć, to wynik podobny do tego:

```bash
echo a
```

```
a
```

```bash
echo b
```

```
b
```

zamiast oceniać cały skrypt i przechwytywać cały wynik:

```bash
echo a
echo b
```

```
a
b
```

questionAnswers(4)

yourAnswerToTheQuestion