Iterm2:启动时自动向 shell 发送文本

Iterm2:启动时自动向 shell 发送文本

使用配置文件,您可以在会话开始时在“开始时发送文本”下向 shell 发送文本。我想连续执行此操作 3 次,但似乎只允许一个字符串。有人知道使用 iterm2 执行此操作的其他方法吗?我相信我可以使用 applescript,但我更愿意直接使用 iterm2 启动会话。

前任:

<terminal session starts>
ssh server
send "asdf"
send "qwer"
send "zxcv"
(done...)

我不能简单地设置一个配置文件来执行此操作的原因是我的工作有一个特殊的环境,通常会问 3 个问题。我想自动回答这 3 个问题,并将它们设置为 iterm2 配置文件配置下的“启动时发送文本”。

答案1

有一个名为 的工具Expect可以进行通用的握手和通信,您可以使用它,但是,iTerm2 可以直接从“高级”选项卡执行 Expect 所做的一些操作。

注意:Expect 是用 TcL 编写的,TcL 本身就是一种很棒的语言。这个特定问题可能在某个 Expect FAQ 中有一个注释很好的答案。此外,如果您选择使用 Expect 而不是 iTerm2 实现解决方案,您可以在 OSX 主机以外的其他主机上使用该解决方案。所以请提前考虑一下这种权衡。在短期内,iTerm2 Triggers 选项将满足您的需求。

因此,要提供 Expect 直接从 iTerm2 提供的一些功能,请转到“高级”选项卡。您将在那里找到触发器功能。从那里,您可以添加“+”特定触发器规则。简而言之,这些触发器(和 Expect)允许您过滤所有发往和来自终端的文本,将该文本与用户指定的正则表达式 (ReEx) 触发器进行匹配,当该 ReEx 在终端的文本流中匹配时,iTerm2 将执行用户指定的任务。

以下是一个触发规则,它将匹配包含一个单词“密码”的行,然后发送文本:我的密码。

在此处输入图片描述

请记住,终端文本流包含看不见的字符,指定要匹配的精确的 ReEx 可能是一个挑战,特别是,例如,因为不同的服务器实现了不同的行分隔符,并且如果 ReEx 专门使用一个,它就无法匹配。

有一件事:我在想你为什么会问这个问题?不确定你熟悉什么,但如果你想通过自动登录ssh,添加评论,设置起来很容易。如果你对此感兴趣,请搜索关键字“ssh-keygen”和“为 ssh 生成 rsa 公钥”。

我知道这是一个评论,但我想我会把它扔到那里,因为我已经有空间了——不管它值多少钱:

我认为可以使用Send text at start:来设置与远程主机会话相关的环境变量。例如,我使用此方法将参数传递给我的远程进程,作为通过环境变量传递参数的一种方式。我不确定,但那将是使用该Command字段来定制特定ssh userid@hostname运行时发生的情况。

请参阅第二个答案是否可以让 SSH 转发空参数?完整的例子,但它都归结为以下语法:

$ ssh me@localhost 'VAR1="var1 text" /tmp/try.pl'

我假设该选项的一个潜在用途是向远程进程的环境Send text at start:提供VAR1="var1 text" /tmp/try.pl,或者简单地提供。VAR="var1 text"

下面是一个更具体的示例,使用名为 r2d2 的 Dual-G5 Mac 主机:

以下是我设置 r2d2 的个人资料的方法:

在此处输入图片描述

现在,当我启动 r2d2 iTerm2 时,我echo $FRED会看到我调用的任何命令,ssh 都可以检查环境并确定执行的上下文:

在此处输入图片描述

当然,这只是我根据自己的经验推测的,所以这只是一种可能性。我现在知道我可以利用这个控制路径,所以谢谢你的提问。

答案2

你也可以使用如下脚本~/test.py

#!/usr/local/bin/python3

print("echo hello world")

然后在 iTerm2 菜单 Session->Run Co-Process 中以协同进程的形式执行该脚本,并将脚本指定为~/test.py

我认为有必要让你的脚本可执行(尽管我还没有尝试过其他方法)chmod +x ~/test.py

祝你编码愉快!

相关内容