【问题标题】:How to log if an environment variable is unset?如果未设置环境变量,如何记录?
【发布时间】:2011-10-19 06:15:28
【问题描述】:

如何编写检查环境变量并在未设置变量时写入日志文件的 shell 脚本?

【问题讨论】:

  • 我可以从脚本内部回显 $var。要么我检查返回字符串是否为空等。这看起来非常麻烦和hacky..
  • 也在unix&linux中提问

标签: linux bash shell unix scripting


【解决方案1】:

如果您只想要未设置的消息,那么:

if [ -z "${CHOSEN_ENV_VAR}" ]
then echo "CHOSEN_ENV_VAR was not set but should have been" >> log.file
fi

如果您只是希望脚本停止并报告 stderr,那么:

: ${CHOSEN_ENV_VAR:?'was not set but should have been'}

(您可以在交互式shell中测试,但交互式shell不会退出。把它放在脚本中,脚本就会退出。)

【讨论】:

  • 我猜他应该在你的第二个例子中省略(第二个):,因为:? 不仅指未设置的变量,而且还检查 NULL 变量。仅在未设置时省略冒号测试。 (与您的第一个示例相同的问题,只是检查空虚,而不是未设置)
  • 是的——我很少需要设置但为空的环境变量;它通常表明存在问题。您还可以使用[ -n "${CHOSEN_ENV_VAR+X}" ] 来检测未设置的环境变量。如果未设置 CHOSEN_ENV_VAR,则表示法会生成 X。
【解决方案2】:

写入日志的命令是logger。 然后你测试一个变量是否设置了test -v,所以在你的脚本中你必须有这些行:

if test ! -v VARNAME; then logger Variable VARNAME is unset; fi

编辑:如果您的意思是日志只是一个任意日志文件而不是系统日志,您当然可以用 echo bla bla > log.file 替换记录器。

【讨论】:

    【解决方案3】:

    [ -z "$name" ] 检查name 是否为空。要测试它是否未设置,请使用[ -z "${name+isset}" ]

    check() {
      if [ -z "${name+isset}" ]; then
        echo "name is unset"
      elif [ -z "$name" ]; then
        echo "name is empty"
      else
        echo "name is non-empty"
      fi
    }
    name=me; check name
    name=; check name
    unset name; check name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 2014-09-05
      • 2014-09-29
      相关资源
      最近更新 更多