如何编写bash脚本来打开CLI程序然后执行一些命令?

时间:2018-01-16 00:22:50

标签: bash command-line-interface

我需要打开CLI工具(indy),然后执行一些命令。

所以我想写一个bash脚本来为我做这个。使用python作为示例,它可能看起来像:

#!/bin/bash

python
print ("hello world")

但是当然所有这一切都是打开python并且不输入命令。我怎么能做这个工作?

我的开发环境是Windows,运行时环境将是一个linux docker容器。

编辑:看起来这种方法适用于我实际正在做的事情,但似乎Python并不喜欢它。任何线索为什么?

2 个答案:

答案 0 :(得分:1)

从评论中,您需要使用您不想执行的命令创建.py文件。

#!/bin/bash
python <path-to-file>.py

其他选项当然是用标志-c传递cli上的命令(参考python手册页)

#!/bin/bash
python -c "print('hello')

与indy会是一样的。您无法运行indy-cli并在脚本的后续行中输入命令。您需要使用indy-cli来运行它自己的命令集,方法是将这些命令作为参数传递给indy-cli。 (在这种情况下,作为它自己的脚本文件)。

#!/bin/bash
indy-cli <path-to-indy-file-that-contains-indy-commands>

答案 1 :(得分:1)

如何嵌入外国脚本:我们可以注释掉“外来”脚本部分,然后将其“嵌入”在bash脚本中;然后使用sed或某种方式“提取”该部分并执行它。

sed -n '                    ## do not automatically print
  /^### / {                 ## for all lines that begins with "### "
    s:^### ::;              ## delete that "### "
    s:FUNC:$1:g;            ## replace all "FUNC" with "$1"
    p                       ## print that line
}'

将python脚本“嵌入”bash脚本的示例:

#!/bin/bash

ME="$0"

callEmbeded() {
  sed -n "/^### /{s:^### ::;s:FUNC:$1:g;p}" <"$ME" | python
}

while read -n1 KEY; do
  case "x$KEY" in
    x1)
      callEmbeded func1
      ;;
    x2)
      callEmbeded func2
      ;;
    xq)
      exit
      ;;
    *)
      echo "What do you want?"
  esac
done

### # ----
### # python part
###
### def func1():
###   print ("hello world!")
###
### def func2():
###   print ("hi there!")
###
### if __name__ == '__main__':
###   FUNC()

将bash脚本“嵌入”另一个脚本的类似示例:

# cat <<EOF >/dev/null

ME="$0"

callEmbeded() {
  cut -c3- <"$ME" | bash -s "$1"
}

while read -n1 KEY; do
  case "x$KEY" in
    x1)
      callEmbeded func1
      ;;
    x2)
      callEmbeded func2
      ;;
    xq)
      exit
      ;;
    *)
      echo "What do you want?"
  esac
done

# EOF
# ## ----
# ## embeded part
#
# func1() {
#     echo "hello world."
# }
#
# func2() {
#     echo "hi there."
# }
#
# eval "$@"