2010-09-04 95 views
0

我遇到了一些bash脚本问题。我希望脚本能够找到“Firefox.app”目录,但在shell解释器中键入它们时不起作用的东西在脚本中不起作用。Bash脚本处理不同,然后在终端中输入?

ffxapp=`find /Applications/ -name "Firefox.app" -print | tee firefox.location` 

当我在shell中输入它时,它的工作原理为($ffxapp == "/Applications/Firefox.app")。在脚本中,它不是($ffxapp == "")。我感到很困惑。

+2

你能在“不工作”详细点吗?在脚本中运行时,实际效果如何? – LarsH 2010-09-04 16:15:46

+0

定义“不起作用”。 – cHao 2010-09-04 16:18:35

+0

对不起。完成。 – Violet 2010-09-04 16:44:08

回答

2

让我打开我的心灵感应模式。问题最可能的原因是您正在脚本中分配一个变量,并在您检查它时希望它出现在您的shell中。但是,当脚本由shell运行时,它会创建一个子shell,因此所声明的所有变量都不会暴露给父shell的环境。如果你想从脚本中导出一个变量,你必须明确告诉bash在同一个shell中运行它。 OK,太多的话,这里有一个例子:

#!/bin/bash 

FOO=bar 

当您运行此脚本,FOO变量不会出现在你的shell,即使您使用“出口”:

$ cat test.sh 
#!/bin/bash 

FOO=bar 

$ ./test.sh 
$ echo $FOO 

$ 

但是,如果你

$ source ./test.sh 
$ echo $FOO 
bar 
$ 

希望它能帮助:)

0

添加到弗拉德的答案,通过:它使用“源文件”命令,它会运行工作添加echo $FOO你可以看到价值的剧本是有脚本运行时,但是当脚本已经终止了:

$ cat test.sh 
#!/bin/bash 

FOO=bar 
echo $FOO 

$ ./test.sh 
bar 
$ echo $FOO 

$