我需要打开CLI工具(indy),然后执行一些命令。
所以我想写一个bash脚本来为我做这个。使用python作为示例,它可能看起来像:
#!/bin/bash
python
print ("hello world")
但是当然所有这一切都是打开python并且不输入命令。我怎么能做这个工作?
我的开发环境是Windows,运行时环境将是一个linux docker容器。
编辑:看起来这种方法适用于我实际正在做的事情,但似乎Python并不喜欢它。任何线索为什么?
答案 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 "$@"