1

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

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

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

4

2 回答 2

1

不是有效的 shell 代码。

外壳不允许有空格=

其余的,虽然这看起来很糟糕,但它尝试到cd脚本本身的目录,显示当前目录并最后cd回到最新的cd地方,将他的标准输出重定向STDOUT/dev/null垃圾箱(这没有任何意义,cd只显示在STDERR失败时的标准错误,从不开启STDOUT

如果您想以适当的简单方式执行此操作:

apphome="$(dirname $0)"

这就是你所需要的。

笔记

反引号

`

用于旧式命令替换,例如

foo=`command`

foo=$(command)

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

于 2012-10-31T03:49:00.880 回答
-1

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

cd `dirname [脚本名称]`
密码
光盘 -

第一个命令会将目录更改为包含您的脚本的目录;第二个将打印当前目录;第三个会带你回到原来的目录。第三个命令的输出不会被打印出来。总之,它将打印出一个目录的名称,该目录包含包含相关行的脚本。至少,我是这样理解的。

于 2012-10-31T04:02:22.807 回答