【问题标题】:Exec dialog command from Expect Script来自 Expect Script 的 Exec 对话框命令
【发布时间】:2015-08-27 05:11:34
【问题描述】:
我在 TCLSH 中测试了下面的行,它可以工作:
dialog --title "Text" --msgbox "Text" 8 60
但是,如果我在带有“exec”的 Expect 脚本中尝试它,它就会挂起:
exec dialog --title "Text" --msgbox "Text" 8 60
我做了一点研究,似乎不需要转义特殊字符,但也许这就是问题所在?
你们有什么建议可以让这段代码工作吗?谢谢!
【问题讨论】:
标签:
linux
bash
dialog
exec
expect
【解决方案1】:
默认情况下,交互式tclsh 的行为类似于shell(如Bash),它会将未知命令作为外部可执行文件处理并自动exec 它们。这就是为什么您可以直接从tclsh 中运行dialog。这可以通过定义 global auto_noexec var 来关闭。例如:
[bash] # tclsh
% echo hello world
hello world
% set auto_noexec "the value does not matter"
1
% echo hello world
invalid command name "echo"
%
对于exec 命令,默认情况下它不会将输出打印到终端。你应该使用>@ stdout 或/和2>@ stderr:
exec dialog --title Text --msgbox Text 8 60 >@ stdout 2>@ stderr
【解决方案2】:
实验一下,如果你直接发送标准输出到终端,它会按预期工作
exec dialog --title "Text" --msgbox "Text" 8 60 >/dev/tty