键盘如何从 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 做太多事情;我在大多数情况下遇到了不同的问题)。
我想通过 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 做太多事情;我在大多数情况下遇到了不同的问题)。