键盘如何从 tcl 输入到 运行 bash 脚本

how can keyboard input from tcl to running bash script

我想通过 Tcl 启动 bash 脚本。

虽然 bash 脚本是 运行,但大约 1 分钟后会出现一个输入字段,因此您必须使用键盘输入内容。我想在那里插入变量 cc 。我该怎么做?

我的 tcl 股票:

bind pub "-|-" !ttest pub:ttest

proc pub:ttest {nick host handle channel arg} {

    set aa [lindex [split [stripcodes bcu $arg]] 0];
    set bb [lindex [split [stripcodes bcu $arg]] 1];

    set cc [lindex [split [stripcodes bcu $arg]] 2];

    set start [exec bash -c "su user -c \"cd /home/user/; bash teststart.sh $aa $bb\""]

    putnow "PRIVMSG $channel :done"
}

当我直接在控制台中启动 bash 脚本时会出现这种情况:

user@home:/$ cd /home/user
user@home:~$ bash teststart.sh testaa testbb
ENTER HERE:
(I would like to insert the variable cc here)
script done going exit

这是一个 expect 脚本,可以执行您要查找的内容:

#!/usr/bin/expect

# Put your bash specific command here - I just have bash for now
spawn /bin/bash

interact {

-o -nobuffer "ENTER HERE: "  {
        send $whatever
}

}

抱歉,我不能给你更多 - 我实际上并没有使用 expect 或 tcl(好吧,很多年没用了)所以我不会对你有太大帮助。我只是希望能为您指明正确的方向。

理论上,您可以将变量放在脚本的标准输入上。它会在那里等待,直到脚本准备好使用它。您可以使用 <<exec 来做到这一点,这样您就可以直接输入 Tcl 值,而无需任何临时文件:

# We can call “su” directly; no need for a bash wrapper
set start [ exec su user -c "cd /home/user/; bash teststart.sh $aa $bb" << $cc ]

(将 任何东西 连接到通过 su 运行脚本的 IRC 的想法让我感到困惑。我真的希望你的安全代码是好的!)


如果您需要将字符串的发送延迟一段固定的时间,使用一个小的子进程管道可能是最简单的方法:

set start [ exec bash -c "sleep 60; echo $cc" | su user -c "cd /home/user/; bash teststart.sh $aa $bb" ]

对于更复杂的交互,您进入了 Expect 扩展非常值得的领域。我没有将它与 Eggdrop 集成的经验(也没有对 Expect 做太多事情;我在大多数情况下遇到了不同的问题)。