shell - 使用 TCL 8.5 版命令执行 UNIX shell 命令
问题描述
我正在尝试计算文件夹中不同 TCL 脚本的 SHA1 以进行版本检查(我的 TCL 版本是 8.5)。我想在其中一个 TCL 脚本中执行此操作,并将此信息打印到单独的文件中。我以为我可以做这样的事情:
set repoDir "some/repo/dir"
set scripts_hash [cd $repoDir/scripts; exec sha1sum ./* | sha1sum]
puts $file $scripts_hash
但是, exec 不允许这样做吗?如何从 .tcl 脚本中执行 sha1sum shell 命令?
解决方案
您可以显式遍历每个元素,也可以将它们放在一起。这是一个循环选项:
# ... open $file
set repoDir "some/repo/dir"
foreach f [glob -directory $repoDir -- "*"] {
puts $file [exec sha1sum $f]
}
close $file
这是一个一次性的电话sha1sum
:
# ... open $file
set repoDir "some/repo/dir"
puts $file [exec sha1sum {*}[glob -directory $repoDir -- "*"]]
close $file
{*}
前缀强制 TCL (v8.5+) 扩展每个结果列表glob
项以成为sha1sum
.
推荐阅读
- javascript - 无法使用 IntlProvider 浅层渲染组件
- go - 有没有办法在 macOS 中方便地切换 go 版本?
- php - 如何在 laravel 查询中转换 SQL 查询?
- python - 将数据框拆分为子数据框并根据相关数据框填充内容?
- ansible - 在哪里放置全局自定义 ansible 过滤器
- spring-boot - Java Spring Boot 和 React Native 应用程序同时向 api 发送 id 和 object
- apache-kafka - 从 Angular 前端发布到 Apache Kafka 主题
- webots - 如何实现在 Webots Web Simulation 中编辑控制器的功能?
- docker - 无法按照 Docker 教程构建 docker 映像
- angular - Angular 应用程序和部署在 Docker 容器中的 Spring Boot API 之间的通信问题