Bash脚本的处理方式不同,然后在终端中输入?

时间:2010-09-04 16:08:50

标签: macos bash

我在使用bash脚本时遇到了一些问题。我希望脚本找到“Firefox.app”目录,但是当我在shell解释器中输入它们时起作用的东西在脚本中不起作用。

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

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

2 个答案:

答案 0 :(得分:2)

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

#!/bin/bash

FOO=bar

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

$ cat test.sh 
#!/bin/bash

FOO=bar

$ ./test.sh 
$ echo $FOO

$ 

但如果使用“source”命令运行它,它将起作用:

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

希望有所帮助:)

答案 1 :(得分:0)

添加到Vlad的答案,通过在脚本中添加echo $FOO ,您可以在脚本运行时看到值,但在脚本终止时消失:

$ cat test.sh
#!/bin/bash

FOO=bar
echo $FOO

$ ./test.sh
bar
$ echo $FOO

$