在Linux shell中,所有在shell脚本中工作的命令也可以在命令提示符下工作吗?

时间:2011-02-18 09:38:24

标签: linux shell

我尝试在将代码放入脚本之前以交互方式测试代码,并且想知道脚本中是否存在任何不同的行为?

3 个答案:

答案 0 :(得分:3)

执行脚本时,它有自己的环境变量,这些变量从父进程(执行命令的shell)继承。只有导出的变量才会对子脚本可见。

更多信息:

顺便说一句,如果您希望脚本在与执行它的shell相同的环境中运行,您可以使用point命令执行此操作:

. script.sh

这将避免为您的shell脚本创建新进程。

答案 1 :(得分:2)

脚本的运行方式与在shell提示符下键入内容的方式完全相同。甚至可以在shell提示符下输入循环和if语句。 shell将继续要求更多,直到它有一个完整的语句来执行。

答案 2 :(得分:2)

正如大卫正确指出的那样,注意环境变量。

根据您打算如何启动脚本,.profile.bashrc中设置的变量可能无法使用。这取决于脚本是否在interactive mode中启动以及它是否是登录shell。请参阅Quick Startup File Reference

我看到的一个常见问题是从shell运行时运行的脚本,但是从另一个应用程序(cron,nagios,buildbot等)运行时失败,因为未设置$PATH

要测试命令/脚本是否可以在 clean 会话中运行,您可以使用以下命令登录:

ssh -t localhost "/bin/bash --noprofile --norc"

这确保我们不会从父shell继承任何导出的变量,也不会从.profile.rc继承任何导出的变量。

如果它在 clean 会话中有效,并且您的所有命令都不在interactive mode,那么您就可以了!

相关问题