2012-10-31 46 views

回答

1

这是不是有效的shell代码。

外壳不允许空格周围=

对于剩下的,虽然这似乎打破,它尝试cd到脚本本身的目录,显示当前目录&终于cd回最新cd把他的标准输出STDOUT重定向到/dev/null垃圾斌(这时候它不能让没有任何意义,只有cd在标准错误STDERR显示,从来没有在STDOUT

如果您想以适当的方式做到这一点:

apphome="$(dirname $0)" 

这就是你需要的。

反引号

`

在旧式的命令取代使用,例如

foo=`command` 

foo=$(command) 

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

+0

是不是cd到目录 - 看看它是否存在 - 可能的一些hackish try/catch逻辑的一部分?如果cd失败vs成功,apphome的价值会发生什么变化? – Paul

+0

我不知道任何情况下'cd'可能无法'cd'到现有位置:脚本存在于此路径中。 –

+1

在我的文章中查看我的新**注**。 –

-1

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

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

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

+2

正如sputnick指出的,“=”周围的空格是不允许的。我在文章中假设了格式问题。此外,sputnick对于实现这条线的更简单的方法是非常正确的。 – Peggy

+0

在bash中,如果我运行d =“\'date \'”并检查日期,然后echo $ d,我发现存储在d中的日期来自检查日期之前,因此date命令立即执行并没有被留待以后执行。 – Paul

相关问题