从 Expect Script 执行对话框命令

Exec dialog command from Expect Script

我在 TCLSH 中测试了下面的行,它有效:

dialog --title "Text" --msgbox "Text" 8 60

但是,如果我在带有 "exec" 的 Expect 脚本中尝试它,它只会挂起:

exec dialog --title "Text" --msgbox "Text" 8 60

我查了一下,似乎没有必要转义特殊字符,但也许这就是问题所在?

你们有什么建议可以让这段代码正常工作吗?谢谢!

稍微试验一下,如果您将 stdout 直接发送到终端,它将按预期工作

exec dialog --title "Text" --msgbox "Text" 8 60 >/dev/tty

默认情况下,交互式 tclsh 的行为类似于 shell(类似于 Bash),它会将未知命令作为外部命令处理可执行文件和自动 exec 它们。这就是为什么您可以从 tclsh 中直接 运行 dialog 的原因。这可以通过定义 global auto_noexec 变量来关闭。例如:

[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 or/and 2>@ stderr:

exec dialog --title Text --msgbox Text 8 60 >@ stdout 2>@ stderr