首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有办法检查bash脚本是否完整?

有没有办法检查bash脚本是否完整?
EN

Stack Overflow用户
提问于 2013-07-24 04:46:40
回答 1查看 3.6K关注 0票数 21

我正在尝试在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

回显为

一个

```bash

回声b

B

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

```bash

回显为

回声b

一个

B

EN

回答 1

Stack Overflow用户

发布于 2016-07-29 17:22:13

代替pidfiles,只要你的脚本有一个唯一可识别的名字,你就可以这样做:

  #!/bin/bash
COMMAND=$0
# exit if I am already running
RUNNING=`ps --no-headers -C${COMMAND} | wc -l`
if [ ${RUNNING} -gt 1 ]; then
  echo "Previous ${COMMAND} is still running."
  exit 1
fi
... rest of script ...
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17820740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档