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

如何从tcl键盘输入到运行bash脚本,bash,tcl,Bash,Tcl,我想通过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 [s

我想通过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(好吧,很多年都没有),所以我不会对你有多大帮助。我只是希望为您指出正确的方向。

理论上,您可以将变量放在脚本的标准输入上。它将在那里等待,直到脚本准备好使用它。您可以使用
实现这一点,答案只有一个词:
expect
。expect脚本(expect是TCL)在启动程序(比如ssh或bash)后将假装为tty。Expect在tty输出中查找模式,当它找到匹配项时,它可以执行一个操作,比如发送一些击键,就好像它们是从键盘键入的一样。
# 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 ]
set start [ exec bash -c "sleep 60; echo $cc" | su user -c "cd /home/user/; bash teststart.sh $aa $bb" ]