导出 Bash 命令行参数变量以在嵌入式 Expect 中使用

2023-12-04

The echo测试显示我的命令行变量正在工作,但是我如何传递它们,导出它们,以便在嵌入式中使用expect?

#!/bin/bash

echo name of script is $0
echo host is $1
echo hostusername is $2
echo hostpassword is $3

expect -c 'spawn ssh -l $2 $1 < ./sf-wall_scp_bash.sh
sleep 2

expect {
"(yes/no)? " {send "yes\n"}
    exp_continue
}

expect {
"?assword" {send "$3\r"}
}
sleep 1
'

如果用expectshebang,它的工作原理就像

#!/usr/bin/expect

set host [lindex $argv 0]
set hostusername [lindex $argv 1]
set hostpassword [lindex $argv 2]


spawn ssh -l $hostusername $host
sleep 2

expect {
"(yes/no)? " {send "yes\n"}
    exp_continue
}

expect {
"?assword" {send "$hostpassword\r"}
}
sleep 1

...按预期工作。我需要使用bash虽然并嵌入expect因为脚本需要调用 bash 特定的命令、函数、内置变量...否则简单地使用第二个示例将是一个可行的选择,但事实并非如此。

我尝试声明和导出命令行参数变量,并将上面第一个示例中的 $1、$2、$3 分别更改为声明和导出的变量名称,这在我的另一个脚本中有效,我实际上在其中声明了变量脚本...区别在于它们不是命令行参数。

host=$1
export host
hostusername=$2
export hostusername
hostpassword=$3
export hostpassword

以及仅仅导出它们

export host
export hostusername
export hostpassword

并尝试上面的第一个例子。不用找了,expect继续索赔

无法读取“X”:没有这样的变量

在另一个 bash 脚本中,我能够通过声明变量然后导出它们来成功导出变量,如上面的示例所示。但我却没能有这样的运气通过bash命令行参数变量expect


带有嵌套引号的代码不容易编写和阅读。我建议你使用 shell此处文档句法。例如(演示两种传递方式bash变量到expect):

$ cat foo.sh
arg1=$1
export arg2=$2

expect << END
puts $arg1
puts \$env(arg2)
END
$ bash foo.sh hello world
hello
world
$

我更喜欢export var从外壳并引用它$env(var)在预期中,因为您不必担心var有一些特殊字符(例如', "或空格)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

导出 Bash 命令行参数变量以在嵌入式 Expect 中使用 的相关文章

  • 编译错误:尝试在函数调用中指定参数类型时出现“预期在 ' ' 之前出现主表达式”

    当我编译我的程序时 我收到以下错误消息 stringPerm cpp In function int main stringPerm cpp 12 error expected primary expression before word
  • 如何使用 bash 中提供的工具生成一系列非周末日期?

    我想生成一个文件列表 其中名称包含 filename date 例如file 20111101 file 20120703 开始November 1 2011直到今天 应该不包括周末 Thanks 2011年试试这个 for y in 20
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • 使用 grep 查找所有匹配的模式

    In txt1 S01A1P2 S01A1P5 S01A1P4 In txt2 data train wave S01A1P3 mfc data train wave S01A1P7 mfc data train wave S01A1P8
  • 替换javascript中字符串中的多个字符

    我得到了这段不错的代码 但我不知道为什么不起作用 出于兼容性目的 它应该获取文本输入的值并用 HTML 代码替换每个给定的国家字符 但是 当我单击按钮时 该函数返回字符串而不进行任何更改 任何想法 jsfiddle http jsfiddl
  • 不要将变量内容视为 sed 中的特殊字符

    我有以下内容sed命令 sed i 4i CHANGES CHANGELOG rst 然而 我的 CHANGES变量看起来像这样 title list elem elem 因此 上述命令失败并出现以下错误 sed e expression
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 在cmake中集成bash测试脚本

    我有一个 C cmake 项目 它使用 Boost Test 进行单元测试 现在我想向 cmake 公开一系列 bash 脚本 用于集成测试 假设每个脚本在以下情况下返回 0PASS或某些情况下 0FAILURE 我希望每次运行时都执行每个
  • 独特的 Linux 文件名,可按时间排序

    以前我用的是uuidgen http man7 org linux man pages man1 uuidgen 1 html创建唯一的文件名 然后我需要通过 bash 脚本按日期 时间迭代该文件名 从那时起 我发现简单地通过 ls l 循
  • Bash 脚本跳过提取受密码保护的档案

    我有一个脚本 它使用命令对某些文件夹中的特定 zip 和 或 tar gz 存档进行批量提取 unzip o zip path d destination folder 不幸的是 当存档受密码保护时 脚本会停止并等待密码输入 有没有办法省略
  • Grep 搜索带有换行符的字符串

    如何使用 grep 输出下面给出的输入文件中出现的字符串 export to excel 具体来说 如何处理搜索字符串之间发生的换行符 grep 中是否有一个开关可以执行此操作或其他命令 输入文件 文件a txt 等等 导出到优秀 巴拉巴拉
  • sed 和 rev shell 命令转换为 Python 脚本 [重复]

    这个问题在这里已经有答案了 有一个shell命令 我正在尝试将逻辑转换为python 但我不知道该怎么办 我需要一些帮助 shell命令是这样的 cd tests src main test ls find name vrlp while
  • 通过php变量的值设置输入字段的值

    我有一个简单的 php 计算器 代码是 h1 align center This is PHP Calculator h1
  • 保存下拉列表中的值

    这是我的情况 我有 2 页 一页用于选择值 一页用于编辑与该值关联的数据库相关内容 现在 我对如何将从下拉列表中选择的值保存到 PHP 的变量中一无所知 并且已经进行了相当多的研究 有任何想法吗 HTML
  • 当放入对象方法内时,引用拉入封装方法的方法会移出范围

    当我将引用拉入包的方法放入另一个方法中时 它会离开范围并失败 执行此操作的正确方法是什么 我尝试玩弄 自我 但我是新人 但没有成功 所需的解决方案 不起作用 返回错误 nil NilClass 的未定义方法 accounts NoMetho
  • shell脚本中是否有互斥/信号量机制?

    我正在 shell 脚本中寻找互斥 信号量 并发机制 考虑以下情况 除非 a 用户不关闭共享文件 否则 b 用户应该无法打开 更新它 我只是想知道如何在 shell 脚本中实现互斥量 信号量 临界区等 在 shell 脚本中实现锁定机制 文
  • 需要 sudo 密码的 Bash 脚本

    我正在创建一个 Bash 安装程序脚本 它为 OSX 和 Linux 编译并安装一些库 因为我的脚本中的某些命令 make install apt get install port install 等 需要 sudo 所以我需要用户提供密码
  • 期待、互动,然后再次期待

    有几篇关于相同内容的帖子 但我仍然无法使我的期望脚本正常工作 我的目的是自动化一切 但保留用户输入的密码 所以脚本有 3 个部分 自动登录 给予用户交互以输入密码 将控制权交还给 Expect 脚本以继续工作 所以我有一个将生成的脚本 其中
  • 如何并行运行命令列表?

    我有一个包含我要运行的命令行的文件 该文件包含大约 2 000 行 我有 8 个可用核心 是否可以解析文件并启动 8 个进程 然后在其中一个程序完成时从文件中执行另一个进程 我希望这种情况继续下去 直到到达文件末尾 Use GNU并行 ht
  • 编写一个 shell 脚本,find-greps 并在 1 行中输出文件名和内容

    要查看所有包含 abc 的 php 文件 我可以使用这个简单的脚本 find name php exec grep l abc 我可以省略 l 并且提取部分内容而不是文件名作为结果 find name php exec grep abc 我

随机推荐

  • 仅使用日期选择器过滤 jqGrid 日期时间列

    我目前遇到一个问题 网格中的日期时间列的格式设置为仅显示字段的日期部分 因此 原始数据看起来像 2015 04 15T15 31 49 357 网格列看起来像 4 15 2015 我正在使用日期选择器来支持列过滤 并且希望能够使用 eq 运
  • 如何添加 Objective-C 桥接头条目?

    我有一个 Swift 项目 并添加了一个用 Objective C 编写的 cocoapod 它有头文件和实现文件 据我了解 要使用 导入这些文件到我的 Swift 文件中 我需要添加一个桥接文件 我发现这个网站描述了如何手动执行此操作 因
  • ASP.NET Core 6 应用程序部件项目必须引用哪些 Nuget 包

    我正在创建一个 ASP NET Core 6 应用程序 我想在其中集成单独程序集提供的其他区域 我按照以下位置的文档进行操作https learn microsoft com en us aspnet core mvc advanced a
  • 具有取消能力的长时间运行操作模式

    为了执行长时间运行 让它在这个上下文中搜索 操作 我将加载逻辑放在TPL任务中 所以一般方法Search 在后台线程上调用 Search 操作可能足够长 所以我需要能够正确取消它 使用取消令牌 但是Search 操作直到完成才返回 所以我必
  • 使用 rmarkdown 生成的 Beamer 演示文稿中的列内容垂直居中对齐

    如何在 rmarkdown beamer presentation 中垂直居中对齐多列的内容 正如回答中评论中所建议的那样这个帖子 我试过 column width 30 但这对我不起作用 如果有一种简单的方法来对齐内容每列都不同 这也会非
  • Google 地图 Mouseout 仅适用于最后一个信息窗口

    你好 我有一个随机问题 我一直无法弄清楚 我有一张带有标记的地图 当您将鼠标悬停在其上时 这些标记会显示信息窗口 当您将鼠标移开时 这些信息窗口应该会关闭 由于某种原因 第二部分 鼠标移开时关闭信息窗口 仅应用于最后一个标记 如果有人可以向
  • 有什么方法可以动态设置 WP7 Webbrowser 控件高度并锁定滚动吗?

    我需要在 WebBrowser 控件中显示 html 字符串 但它的长度可以是可变的 并且不是屏幕上唯一的内容 因此 我需要能够设置与消息的实际内容相对应的宽度 WebBrowser 具有 ActualHeight 属性 但不会产生任何结果
  • 我可以在 Delphi IDE 中禁用 Insert 键吗?

    Something I find really annoying is putting the Delphi editor into type over mode by pressing the Insert key is there a
  • java中的接口、类和构造函数

    关于接口和类 有些事情让我困扰 我正在尝试通过名为 IPAddressString 的类来实现名为 IPAddress 的接口 Ipadress 包含四个部分 我正在编写一种名为 mask 的方法 该方法用给定地址屏蔽当前地址 掩蔽 运算是
  • 使用 Django ORM 作为独立的[重复]

    这个问题在这里已经有答案了 可能的重复 只使用 Django 的某些部分 仅使用 Django 的 DB 部分 我想独立使用 Django ORM 尽管在谷歌上搜索了一个小时 我仍然有几个问题 是否需要我使用setting py myApp
  • R Markdown Shiny renderPlot 来自 lapply 的绘图列表

    我正在开发 R Markdown Shiny 文档来 对数据框进行子集化以包含 日期 列和一些数字数据列 设置闪亮的用户输入的方式是 选择要包含的数据列的单选按钮 然后单击 子集数据 按钮来创建d 没问题 生成绘图列表 plotList 每
  • 字符串插值的变量返回非单位值

    这是我第一次使用 LESS 构建网站 并遇到了以下代码最能描述的问题 section row padding size xs 30px section row padding size sm 50px section row padding
  • asp.net mvc 2应用程序中的IoC和dataContext配置

    我有Global asax就像下面的代码 public class MvcApplication System Web HttpApplication public static void RegisterRoutes RouteColle
  • 是否可以在发送通知时停止播放 UILocalNotification 的声音?

    如果 UILocalNotification 触发时设置了声音 并且用户点击通知警报上的 取消 声音就会停止 但如果用户点击 查看 iOS 就会向应用程序发送通知 并且声音会继续播放 有什么办法可以从应用程序中取消此声音吗 通知发送后在应用
  • 在关系数据库中存储分层数据有哪些选项?

    良好的概述 一般来说 您要在快速读取时间 例如 嵌套集 或快速写入时间 邻接列表 之间做出决定 通常 您最终会得到以下最适合您需求的选项组合 以下提供一些深度阅读 另一种嵌套区间与邻接列表比较 最好的比较我发现的邻接列表 物化路径 嵌套集和
  • 从Python中的字典列表中获取特定索引项的列表(列表理解)

    我有一个字典列表 如下所示 listDict id 1 other 2 id 3 other 4 id 5 other 6 我想要字典中所有 id 的列表 因此 从给定的列表中我会得到以下列表 1 3 5 应该是一行 我知道我以前做过这个
  • 如何测试是否已定义并返回值或某些默认值

    在我的代码中 我经常这样写 my a defined scalar scalar default value or my b exists hash hash default value 有时哈希值很深 代码可读性不太好 有没有更简洁的方法
  • 观察 firebase DB 的不明确使用

    我真的不明白出了什么问题 我正在尝试从 firebase 加载一些设置数据Settings节点 其他函数中其他节点的相同代码可以工作 但这个代码不明确 为什么 var ref FIRDatabaseReference Global vari
  • 如何使用正则表达式对两组列进行透视[重复]

    这个问题在这里已经有答案了 我有这个数据 myvar tibble var 1 c a b c var 2 c d e f var 3 c g h i something var 1 1 3 something var 2 4 6 some
  • 导出 Bash 命令行参数变量以在嵌入式 Expect 中使用

    The echo测试显示我的命令行变量正在工作 但是我如何传递它们 导出它们 以便在嵌入式中使用expect bin bash echo name of script is 0 echo host is 1 echo hostusernam