如何从tcl键盘输入到运行bash脚本
我想通过Tcl启动一个bash脚本 bash脚本运行时,大约1分钟后会出现一个输入字段,因此必须使用键盘输入内容。我想在那里插入变量如何从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
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" ]