Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将接受参数的expect脚本嵌入到bash shell脚本中?_Bash_Shell_Arguments_Embed_Expect - Fatal编程技术网

如何将接受参数的expect脚本嵌入到bash shell脚本中?

如何将接受参数的expect脚本嵌入到bash shell脚本中?,bash,shell,arguments,embed,expect,Bash,Shell,Arguments,Embed,Expect,我正在编写一个bash脚本,它与其他许多东西一样使用expect来自动运行二进制文件,并通过回答安装程序提示来安装它 当在bash脚本中使用命令“expect$expectscriptname$Parameter”调用expect脚本时,我能够使expect脚本正常工作。但是,我希望将expect脚本嵌入shell脚本,而不必为作业维护两个单独的脚本文件。我四处搜索,发现将expect嵌入bash脚本的过程是声明一个变量,如下面的VAR,然后回显它: VAR=$(expect -c " #con

我正在编写一个bash脚本,它与其他许多东西一样使用expect来自动运行二进制文件,并通过回答安装程序提示来安装它

当在bash脚本中使用命令“expect$expectscriptname$Parameter”调用expect脚本时,我能够使expect脚本正常工作。但是,我希望将expect脚本嵌入shell脚本,而不必为作业维护两个单独的脚本文件。我四处搜索,发现将expect嵌入bash脚本的过程是声明一个变量,如下面的VAR,然后回显它:

VAR=$(expect -c "
#content of expect script here
")
echo "$VAR"
1) 我不明白echoing$VAR实际上是如何运行expect脚本的。有人能解释一下吗?
2) 我不知道如何将$Parameter传递到VAR或echo语句中。这是我主要关心的问题

有什么想法吗?谢谢。

在bash中,构造
$(cmd)
运行指定的命令并捕获其输出。它类似于倒勾符号,尽管有一些细微的区别。因此,对VAR的赋值就是运行expect命令的内容:

从bash手册页面:

当老式的反报价表 如果使用替换,则使用反斜杠 保留其字面意义,除了 后跟$、
或\时。这个
第一个后引号前面没有
反斜杠终止命令
替代。当使用
$(命令)`表格,所有字符 括号之间构成了 指挥部;没有人受到特殊对待

这就是它工作的原因:bash注释字符(#)在
$(…)
中不被视为注释字符

编辑

传递参数:把它们放进去。例如,考虑这个脚本:

foo="Hello, there"
bar=$(echo "
# $foo
")
echo $bar
如果运行该脚本,它将打印:

# Hello, there
因此,
$foo
的值在引号中被替换。这同样适用于
expect
脚本。

在bash中,构造
$(cmd)
运行指定的命令并捕获其输出。它类似于倒勾符号,尽管有一些细微的区别。因此,对VAR的赋值就是运行expect命令的内容:

从bash手册页面:

当老式的反报价表 如果使用替换,则使用反斜杠 保留其字面意义,除了 后跟$、
或\时。这个
第一个后引号前面没有
反斜杠终止命令
替代。当使用
$(命令)`表格,所有字符 括号之间构成了 指挥部;没有人受到特殊对待

这就是它工作的原因:bash注释字符(#)在
$(…)
中不被视为注释字符

编辑

传递参数:把它们放进去。例如,考虑这个脚本:

foo="Hello, there"
bar=$(echo "
# $foo
")
echo $bar
如果运行该脚本,它将打印:

# Hello, there
因此,
$foo
的值在引号中被替换。这同样适用于
expect
脚本。

尝试以下操作:

#!/bin/sh

tclsh <<EOF
puts $1
EOF
#/垃圾箱/垃圾箱
tclsh尝试以下方法:

#!/bin/sh

tclsh <<EOF
puts $1
EOF
#/垃圾箱/垃圾箱

tclsh您是否考虑过只编写一个expect脚本,而不是bash脚本和expect脚本


Expect是Tcl的超集,这意味着它是一种功能齐全的编程语言,你可以用它做任何你可以用bash做的事情(对于你做不到的事情,你可以总是执行bash命令。你不必只为了“Expect”而使用Expect事情

您是否考虑过只编写一个expect脚本而不是bash脚本和expect脚本


Expect是Tcl的超集,这意味着它是一种功能齐全的编程语言,你可以用它做任何你可以用bash做的事情(对于你做不到的事情,你可以总是执行bash命令。你不必只为了“Expect”而使用Expect事物

好的。不知道倒勾符号的替代方法。谢谢。关于将shell参数传递给expect有什么想法吗?好的。不知道倒勾符号的替代方法。谢谢。关于将shell参数传递给expect有什么想法吗?