从 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
我在 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