bash脚本命令替换如何工作?

时间:2014-07-02 17:07:49

标签: linux bash cron directory

而且:“为什么这个特定的剧本有这个结果?”

来自Getting the source directory of a Bash script from within,基于his comment中用户l0b0在该问题上提供的一些代码段,我将以下内容用于cron作业:

DIR=$(pwd)
if [ $CRON == "true" ]; then
  # If the environment variable $CRON is set to true, we're probably in a cron job
  if [ $PWD == "/" ]; then
    # And if the current working directory is root, we're probably in a cron job
    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd && echo x)"
    DIR="${DIR%x}"
  fi
fi

然而,无论如何,我的目录变量($ DIR)以某种方式结束了换行符,这会在$ DIR变量用于创建路径时中断脚本。为什么换线呢?

不可否认,我并不过分熟悉bash脚本和命令替换的细微差别。我有可能误解了l0b0脚本背后的目的。

1 个答案:

答案 0 :(得分:0)

简单:建议的代码错误并且总是添加换行符(因为pwd总是打印一个)。

更正的版本将是

dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && printf "%sx" "$PWD")"
dir=${dir%x}