我需要一些帮助来理解以下 shell 脚本行,
apphome = "`cd \`dirname $0\` && pwd && cd - >/dev/null`"
我所理解的是,这是创建一个名为 apphome 的变量。
这不是有效的 shell 代码。
外壳不允许有空格=
其余的,虽然这看起来很糟糕,但它尝试到cd
脚本本身的目录,显示当前目录并最后cd
回到最新的cd
地方,将他的标准输出重定向STDOUT
到/dev/null
垃圾箱(这没有任何意义,cd
只显示在STDERR
失败时的标准错误,从不开启STDOUT
)
如果您想以适当的简单方式执行此操作:
apphome="$(dirname $0)"
这就是你所需要的。
笔记
反引号
`
用于旧式命令替换,例如
foo=`command`
这
foo=$(command)
建议使用语法。$() 内的反斜杠处理不那么令人惊讶,并且 $() 更容易嵌套。见http://mywiki.wooledge.org/BashFAQ/082
似乎为“apphome”变量分配了一个命令。该命令可以稍后执行。dirname 返回文件名的目录部分。$0 是该行包含的脚本的名称(如果我没记错的话)。现在,执行dirname <name>
将返回一个目录,而 cd 将使用该值。因此,假设每个命令都成功,它将执行一行中的三个命令。命令是:
cd `dirname [脚本名称]` 密码 光盘 -
第一个命令会将目录更改为包含您的脚本的目录;第二个将打印当前目录;第三个会带你回到原来的目录。第三个命令的输出不会被打印出来。总之,它将打印出一个目录的名称,该目录包含包含相关行的脚本。至少,我是这样理解的。