Bash脚本处理不同,然后在终端中输入?
问题描述:
我遇到了一些bash脚本问题。我希望脚本能够找到“Firefox.app”目录,但在shell解释器中键入它们时不起作用的东西在脚本中不起作用。Bash脚本处理不同,然后在终端中输入?
ffxapp=`find /Applications/ -name "Firefox.app" -print | tee firefox.location`
当我在shell中输入它时,它的工作原理为($ffxapp == "/Applications/Firefox.app")
。在脚本中,它不是($ffxapp == "")
。我感到很困惑。
答
让我打开我的心灵感应模式。问题最可能的原因是您正在脚本中分配一个变量,并在您检查它时希望它出现在您的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
$
希望它能帮助:)
答
添加到弗拉德的答案,通过:它使用“源文件”命令,它会运行工作添加echo $FOO
在你可以看到价值的剧本是有脚本运行时,但是当脚本已经终止了:
$ cat test.sh
#!/bin/bash
FOO=bar
echo $FOO
$ ./test.sh
bar
$ echo $FOO
$
你能在“不工作”详细点吗?在脚本中运行时,实际效果如何? – LarsH 2010-09-04 16:15:46
定义“不起作用”。 – cHao 2010-09-04 16:18:35
对不起。完成。 – Violet 2010-09-04 16:44:08