我测试了TCLSH中的以下一行并且它有效:
dialog --title "Text" --msgbox "Text" 8 60
但是,如果我在带有" exec"的Expect脚本中尝试它,它就会挂起:
exec dialog --title "Text" --msgbox "Text" 8 60
我做了一些研究,似乎没有必要逃避特殊角色,但也许这就是问题?
你们有什么建议让这段代码有效吗?谢谢!
答案 0 :(得分:3)
默认情况下,交互式tclsh
的行为类似于 shell (如Bash
),并且它将处理未知命令作为外部可执行文件和auto exec 他们。这就是为什么您可以从dialog
内直接运行tclsh
的原因。可以通过定义全局 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
答案 1 :(得分:1)
尝试一下,如果你将stdout直接发送到终端
,它将按预期工作exec dialog --title "Text" --msgbox "Text" 8 60 >/dev/tty