gpt4 book ai didi

bash - 需要使用 expect 生成一个 sourced shell 脚本

转载 作者:行者123 更新时间:2023-12-04 22:52:03 25 4
gpt4 key购买 nike

我正在使用 expect 来自动化一些 bash 脚本。一切顺利,直到我需要执行源脚本;然后我得到这个错误:

couldn't execute "source setNAME.sh": no such file or directory
while executing
"spawn "source setNAME.sh""
(file "./setNAME.exp" line 2)

我以基本方式使用 expect (spawn/expect/send/interact);问题是产卵。让我举一个非常简单的例子:

读取名称、回显值并作为“NAME”导出到环境的脚本:

/home/edu/scripts [] cat setNAME.sh
#!/bin/bash
echo "Your name?"
read name
export NAME=$name
echo "Provided NAME is $name"

如果您使用“source”执行,那么输入值将作为环境变量导出。正是我需要的:

/home/edu/scripts [] source setNAME.sh
Your name?
Dennis
Provided NAME is Dennis

/home/edu/scripts [] echo $NAME
Dennis

让我们使用 expect 来避免交互,将“edu”设置为名称:

/home/edu/scripts [] cat setNAME.exp
#!/usr/bin/expect
spawn setNAME.sh
expect "Your name?"
send edu\r
interact

/home/edu/scripts [] setNAME.exp
spawn setNAME.sh
Your name?
edu
Provided NAME is edu

/home/edu/scripts [] echo $NAME
Dennis

但显然,名字仍然是 Dennis:'edu' 显示在 sh 脚本输出中,但未导出为 NAME,因为 expect 脚本生成 setNAME.sh 脚本时没有源代码(或脚本前的点)。

问题是我无法执行此操作,因为我在开头收到了错误注释。

有什么想法可以解决/满足这种需求吗?

在我的例子中,脚本要复杂得多,其他解决方案也无效,例如这样的事情:

source script.sh << EOF
<option1>
<option2>
...
EOF

这就是我尝试使用 expect 的原因...

非常感谢!

最佳答案

source 是一个 shell 内置命令,不是系统命令,因此您首先需要生成一个 shell,然后将 source 命令发送给它。该 shell 然后将在 NAME 变量中具有值

关于bash - 需要使用 expect 生成一个 sourced shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17617452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com