这个shell脚本代码行是什么意思

时间:2012-10-31 03:44:09

标签: linux shell unix scripting

我需要一些帮助来理解以下shell脚本行,

apphome =     "`cd \`dirname $0\` && pwd && cd - >/dev/null`"

我理解的是,这是创建一个名为apphome的变量。

2 个答案:

答案 0 :(得分:1)

这是有效的shell代码。

shell不允许=

周围的空格

对于其余部分,虽然这看起来很糟糕,但它会尝试cd到脚本本身的目录,显示当前的目录&最后cd返回到最新的cd位置,将标准输出STDOUT重定向到/dev/null垃圾箱(这没有任何意义,cd仅显示在STDERR上标准错误STDOUT失败时,永远不会出现在apphome="$(dirname $0)"

如果你想以一种简单的方式做到这一点:

foo=`command`

这就是你所需要的一切。

注意

反引号

`

用于旧式命令替换,例如

foo=$(command)

{{1}}
建议使用

语法。 $()内的反斜杠处理不那么令人惊讶,$()更容易嵌套。见http://mywiki.wooledge.org/BashFAQ/082

答案 1 :(得分:-1)

似乎将命令分配给“apphome”变量。此命令可以稍后执行。 dirname返回文件名的目录部分。 $ 0是此行包含的脚本的名称(如果我没有记错的话)。 现在,执行dirname <name>将返回一个目录,cd将使用该值。 那么,它会做的是在行中执行三个命令,假设它们中的每一个都成功。命令是:

cd `dirname [name of the script]`
pwd
cd -

第一个命令会将目录更改为包含脚本的目录;第二个将打印当前目录;第三个将哟回到原始目录。不会输出第三个命令的输出。 总之,它将打印出包含包含相关行的脚本的目录名称。 至少,这就是我理解的方式。