我尝试在将代码放入脚本之前以交互方式测试代码,并且想知道脚本中是否存在任何不同的行为?
答案 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,那么您就可以了!