【问题标题】:Implement multiple Bash Scripts into Tcl Script将多个 Bash 脚本实现到 Tcl 脚本中
【发布时间】:2015-01-29 01:33:45
【问题描述】:

我想在我的“主”tcl 程序中植入多个 Bash 脚本 - 所以没有外部 .sh 脚本 - 我希望它们都在一个地方。我已经知道如何将 one 脚本植入 tcl:

set printScript { echo $HOME }

proc printProc {printScript} {
    puts [exec /bin/bash << $printScript]
}

printProc $printScript

我现在的问题是: 如何使用这个概念来实现调用其他脚本的脚本而不将被调用脚本硬编码到调用脚本中? 假设我有这样的事情:

script1.sh

script2="$PWD/script2.sh"
#do some stuff
if [something]
then
    $script2
fi
#do some more stuff

上面提到的概念可以用来解决我的问题吗?如何做到这一点?

【问题讨论】:

  • Bash 有功能,使用吧。
  • 我有很多脚本调用两个脚本。我可以在 bash 中使用函数,但我仍然必须在每个脚本中定义该函数,这会导致重复代码...
  • 脚本不多。用一个脚本代替许多功能。
  • 你不能像这样混合两种不同语言的语法。做到这一点“可靠”(即极其复杂且极难维护)的唯一方法是将脚本作为 strings 保存在 TCL 脚本中,并将它们传递给bash 的标准输入。 @n.m。有正确的想法。
  • 将所有函数写入一个脚本function.sh,并通过在其他脚本中提及来使用该脚本的函数. ..../function.sh

标签: bash tcl


【解决方案1】:

每个脚本都是一个字符串,所以,是的,您可以使用字符串操作来根据脚本原语构建脚本,就像原来一样。这不是最好的解决方案,但它是可能的。如果您选择通过字符串操作来构建脚本,string map 替换可能比变量替换更好。大致如下:

 set script1 {
      #do some stuff
      if [something]
      then
          %X
      fi
      #do some more stuff
 }
 set maplist {%% %}
 lappend maplist %X {$PWD/script2.sh}
 set executable_script [string map $maplist $script1]

其他解决方案包括

  1. 用 Tcl 编写所有内容
  2. 如果可能,用 bash 脚本编写所有内容
  3. 使用函数编写主 bash 脚本并从 Tcl 调用这些函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多