加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

有没有办法检查一个bash脚本是否完成?

发布时间:2020-12-15 19:19:31 所属栏目:安全 来源:网络整理
导读:我试图在bash中实现一个 REPL (read-eval-print loop)。如果这样的事情已经存在,请忽略以下内容并用指针回答这个问题。 我们以这个脚本为例(命名为test.sh): if truethen echo aelse echo bfiecho c 我想做的是逐行阅读这个脚本,检查我到目前为止读过的是
我试图在bash中实现一个 REPL (read-eval-print loop)。如果这样的事情已经存在,请忽略以下内容并用指针回答这个问题。

我们以这个脚本为例(命名为test.sh):

if true
then
  echo a
else
  echo b
fi
echo c

我想做的是逐行阅读这个脚本,检查我到目前为止读过的是一个完整的bash表达式;如果它是完整的,eval它;否则继续阅读下一行。下面的脚本可以希望地说明我的想法(尽管不是很有效)。

x=""
while read -r line
do
  x=$x$'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

动机

对于bash脚本,我想将其解析为语法完整的表达式,评估每个表达式,捕获输出,最后标记源代码和输出(例如使用Markdown / HTML / LaTeX / …)。例如,一个脚本

echo a
echo b

我想要实现的是像这样的输出:

```bash
echo a
```

```
a
```

```bash
echo b
```

```
b
```

而不是评估整个脚本并捕获所有的输出:

```bash
echo a
echo b
```

```
a
b
```
bash -n -c "$command_text"

…将确定您的$ command_text是否是一个语法上有效的脚本,而不实际执行它。

请注意,“语法有效”和“正确”之间的空间广泛。如果要正确解析语言,请考虑采用像http://shellcheck.net/这样的东西。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读