shell - 需要在TCL脚本中结合linux命令
问题描述
我想从 TCL 脚本运行这个 linux 命令:
uname -a | awk '{print $2}'
我怎样才能做到这一点?
解决方案
在 Tcl 中,您使用exec
命令启动子进程和简单管道。(更复杂的管道通常通过open
或通过 Expect 扩展来制作。)有两种方法可以让您的代码使用它。
1.转换引号
bourne shell 单引号与 Tcl 中的大括号非常相似。(除了 Tcl 可以轻松嵌套大括号。)这意味着您可以编写:
exec uname -a | awk {{print $2}}
2.委托给shell
有时,很难进行这种转换。幸运的是,你可以让 shell 为你做这件事:
set theScriptlet {uname -a | awk '{print $2}'}
exec bash -c $theScriptlet
3.停止使用awk获取主机名!
但大多数时候,如果你能提供帮助,你可能不应该使用 awk 作为 Tcl 的子进程。毕竟,awk 是一种自己的编程语言。
set unameinfo [exec uname -a]
set host [lindex [regexp -all -inline {\S+} $unameinfo] 1]
虽然您也可以更直接地获取信息:
set host [exec uname -n]
set host [exec hostname]
set host [info hostname]
请注意,在 Mac OS X 的某些配置中,最后一个选项可能会花费惊人的时间(由于网络堆栈中的怪异可能与 IPv6 分辨率有关)。它也不总是产生完全相同的信息。这取决于您实际上将如何处理这些信息……</p>
推荐阅读
- c++ - 如何在 QT 中为 QInputDialog 输入密码时设置背景不活动和灰色?
- wordpress - 我想将默认徽标大小 400 更改为 1100 宽度。怎么做?
- java - 线程“主”java.lang.ClassCastException 中的异常:setcollection.Enseignant 无法转换为 java.lang.Comparable
- alloy - 如何在合金中创建静态模型?
- laravel - Laravel Eloquent\Collection::save does not exist
- php - 多个内部 SQL 命令
- ssas - MDX 查询以提取日期并将其用作字符串来过滤数据
- typo3 - 自定义 TYPO3Fluid inArray viewhelper 在第一页加载时无法正常工作
- reactjs - React counter hook doesn't increment
- ios - SwiftUI Button 比例宽度高度