我需要一些帮助理解下面的脚本行,什么代码这个shell脚本行意味着
apphome = "`cd \`dirname $0\` && pwd && cd - >/dev/null`"
我所不解的是,这是创建一个名为APPHOME变量。
我需要一些帮助理解下面的脚本行,什么代码这个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 [name of the script]` pwd cd -
首先命令将目录更改到包含脚本的目录;第二会打印当前目录;第三将采取哟回到原来的目录。第三个命令的输出将不会被打印出来。 总之,它将打印出一个包含包含相关行的脚本的目录名称。至少,这是我的理解。
是不是cd到目录 - 看看它是否存在 - 可能的一些hackish try/catch逻辑的一部分?如果cd失败vs成功,apphome的价值会发生什么变化? – Paul
我不知道任何情况下'cd'可能无法'cd'到现有位置:脚本存在于此路径中。 –
在我的文章中查看我的新**注**。 –