2010-09-04 90 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 

$