我想根据二进制命令的结果导出变量。我的TCL脚本是这样的:
set A ""
exec sh -c "export A=\"`/usr/local/cuda/samples/1_Utilities/deviceQuery/deviceQuery -noprompt | grep ^Device | wc -l`\""
puts $A
if { $A == "1" } {
set CUDA_VISIBLES_DEVICES 0
} else {
set CUDA_VISIBLES_DEVICES 1
}
使用这个脚本,当我执行puts $A
时,我在终端中没有得到任何东西......所以在if
命令中我不知道我在评估什么...
我的“导出”必须只返回1或0 ......
抱歉我的TCL水平很差。
感谢。
答案 0 :(得分:2)
我想你想要的是这样的:
set a [exec /usr/local/cuda/samples/1_Utilities/deviceQuery/deviceQuery -noprompt | grep ^Device | wc -l]
在TCL上下文中设置变量a
并将命令的返回值(即输出文本)分配给它。
答案 1 :(得分:0)
问题是你的exec'd命令在它自己的进程中运行,所以当你设置一个变量A时,A只在该进程的生命周期中作为shell变量存在。当流程退出时,A就会消失。
exec命令返回exec'd命令的stdout。如果希望命令的结果在Tcl变量中,则需要将变量设置为exec的结果:
set A [exec ...]
有关exec命令的更多信息,请参阅exec man page。