Man*_*dan -3 shell tcl exec expect
我想从 TCL 脚本运行这个 linux 命令:
uname -a | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
在 Tcl 中,您可以使用exec
命令启动子进程和简单管道。(更复杂的管道通常是通过open
Expect 扩展来创建的。)有两种方法可以让您的代码与之配合使用。
bourne shell 单引号与 Tcl 中的大括号非常相似。(除了 Tcl 可以轻松嵌套大括号。)这意味着您可以编写:
\n\nexec uname -a | awk {{print $2}}\n
Run Code Online (Sandbox Code Playgroud)\n\n有时,很难进行这种转换。幸运的是,您可以要求 shell 为您做这件事:
\n\nset theScriptlet {uname -a | awk '{print $2}'}\nexec bash -c $theScriptlet\n
Run Code Online (Sandbox Code Playgroud)\n\n但大多数时候,如果可以的话,您可能不应该使用 awk 作为 Tcl 的子进程;毕竟,awk 是一种自己的编程语言。
\n\nset unameinfo [exec uname -a]\nset host [lindex [regexp -all -inline {\\S+} $unameinfo] 1]\n
Run Code Online (Sandbox Code Playgroud)\n\n虽然您也可以更直接地获取信息:
\n\nset host [exec uname -n]\n
Run Code Online (Sandbox Code Playgroud)\n\n\n\nset host [exec hostname]\n
Run Code Online (Sandbox Code Playgroud)\n\n\n\nset host [info hostname]\n
Run Code Online (Sandbox Code Playgroud)\n\n请注意,在 Mac OS X 的某些配置中,最后一个选项可能会花费相当长的时间(由于网络堆栈中的怪异现象可能与IPv6 分辨率有关)。它也不总是产生相当的信息;这取决于您实际上要如何处理信息\xe2\x80\xa6
\n