小编Hay*_*iff的帖子

在源代码的 bash 脚本中使变量本地化的最佳方法?

我有一个 bash 脚本,可以生成关于机器上一些长时间运行的作业的进度报告。基本上,这个父脚本循环遍历子脚本列表(用 调用它们source)。子脚本应该设置几个特定的​​变量,然后父脚本将使用这些变量。

今天发现一个bug,第一个子脚本设置的变量不小心被第二个子脚本使用,导致输出不正确。有没有一种干净的方法来防止这些类型的错误发生?

基本上,当我source是一个子脚本时,有几个特定的​​变量我想保留回父脚本。我的父脚本在source每个新的子脚本之前重置这些特定变量,因此它们没有问题。但是,某些子脚本可能具有它在本地使用的其他任意变量,这些变量不应保留回父脚本。

显然,我可以在子脚本的末尾手动取消设置其中的每一个,但是如果我忘记了它们,这些似乎很容易出错。是否有更合适的方法来获取脚本,并且只有某些变量保留在调用 的脚本中source

编辑:为了清楚起见,这是我的父脚本的一种简化版本:

echo "<html><body><h1>My jobs</h1>"

FILES=~/confs/*.sh
for f in $FILES; do
  # reset variables
  name="Unnamed job"
  secsSinceActive="Unknown"
  statusText="Unknown"

  # run the script that checks on the job
  source "$f"

  # print bit of report
  echo "<h3>$name</h3>"
  echo "<p>Last active: $secsSinceActive seconds ago</p>"
  echo "<p>Status: $statusText</p>"

echo "</body></html>"
Run Code Online (Sandbox Code Playgroud)

以下是其中一个子脚本的外观:

name="My awesome job"

nowTime=`expr $(date +%s) `
lastActiveTime=`expr $(date +%s -r ~/blah.log)`
secsSinceActive=`expr $nowTime - $lastActiveTime`

currentRaw=$(cat …
Run Code Online (Sandbox Code Playgroud)

bash source shell-script

10
推荐指数
1
解决办法
7676
查看次数

标签 统计

bash ×1

shell-script ×1

source ×1